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]()