export.py
57 lines
| 1.5 KiB
| text/x-python
|
PythonLexer
neko259
|
r1390 | from django.contrib.auth.context_processors import PermWrapper | ||
neko259
|
r1156 | 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, | ||||
neko259
|
r1390 | perms=PermWrapper(request.user)) | ||
neko259
|
r1156 | |||
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.images.exists(): | ||||
post_image = post.get_first_image() | ||||
post_json['image'] = post_image.image.url | ||||
post_json['image_preview'] = post_image.image.url_200x150 | ||||
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]() | ||||