|
|
from django.contrib.auth.context_processors import PermWrapper
|
|
|
|
|
|
from boards import utils
|
|
|
|
|
|
|
|
|
PARAMETER_TRUNCATED = 'truncated'
|
|
|
|
|
|
DIFF_TYPE_HTML = 'html'
|
|
|
DIFF_TYPE_JSON = 'json'
|
|
|
|
|
|
|
|
|
class Exporter():
|
|
|
@staticmethod
|
|
|
def export(post, request, include_last_update) -> str:
|
|
|
pass
|
|
|
|
|
|
|
|
|
class HtmlExporter(Exporter):
|
|
|
@staticmethod
|
|
|
def export(post, request, include_last_update):
|
|
|
if request is not None and PARAMETER_TRUNCATED in request.GET:
|
|
|
truncated = True
|
|
|
reply_link = False
|
|
|
else:
|
|
|
truncated = False
|
|
|
reply_link = True
|
|
|
|
|
|
return post.get_view(truncated=truncated, reply_link=reply_link,
|
|
|
perms=PermWrapper(request.user))
|
|
|
|
|
|
|
|
|
class JsonExporter(Exporter):
|
|
|
@staticmethod
|
|
|
def export(post, request, include_last_update):
|
|
|
post_json = {
|
|
|
'id': post.id,
|
|
|
'title': post.title,
|
|
|
'text': post.get_raw_text(),
|
|
|
}
|
|
|
if post.attachments.exists():
|
|
|
post_image = post.get_first_image()
|
|
|
post_json['image'] = post_image.file.url
|
|
|
post_json['image_preview'] = post_image.get_preview_url()
|
|
|
if include_last_update:
|
|
|
post_json['bump_time'] = utils.datetime_to_epoch(
|
|
|
post.get_thread().bump_time)
|
|
|
return post_json
|
|
|
|
|
|
|
|
|
EXPORTERS = {
|
|
|
DIFF_TYPE_HTML: HtmlExporter,
|
|
|
DIFF_TYPE_JSON: JsonExporter,
|
|
|
}
|
|
|
|
|
|
|
|
|
def get_exporter(export_type: str) -> Exporter:
|
|
|
return EXPORTERS[export_type]()
|
|
|
|