From 307dd1fba37e82fa2fd6666ce0b7f7d3a87e00f1 Mon Sep 17 00:00:00 2001 From: Dominik George <nik@naturalnet.de> Date: Tue, 11 Jan 2022 22:14:15 +0100 Subject: [PATCH] Port default LiveDocument.update() from Chronos --- CHANGELOG.rst | 2 ++ aleksis/apps/resint/models.py | 23 +++++++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index ebd320b..1f212f8 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -13,6 +13,8 @@ Added ~~~~~ * Open poster group menu entries in new tab. +* [Dev] LiveDocument.update() now has a default implementaiton, rendering + ``self.template`` using ``self.get_context_data()`` Fixed ~~~~~ diff --git a/aleksis/apps/resint/models.py b/aleksis/apps/resint/models.py index 1b94622..eab9cc4 100644 --- a/aleksis/apps/resint/models.py +++ b/aleksis/apps/resint/models.py @@ -1,5 +1,5 @@ from datetime import datetime -from typing import Optional +from typing import Any, Optional from django.core.files import File from django.core.validators import FileExtensionValidator, MaxValueValidator, MinValueValidator @@ -10,9 +10,12 @@ from django.utils.translation import gettext_lazy as _ import reversion from calendarweek import CalendarWeek from calendarweek.django import i18n_day_name_choices_lazy +from celery.result import allow_join_result +from celery.states import SUCCESS from reversion.models import Revision, Version from aleksis.core.mixins import ExtensibleModel, ExtensiblePolymorphicModel +from aleksis.core.util.pdf import generate_pdf_from_template class PosterGroup(ExtensibleModel): @@ -151,6 +154,8 @@ class LiveDocument(ExtensiblePolymorphicModel): SCOPE_PREFIX = "live_document_pdf" + template = None + slug = models.SlugField( verbose_name=_("Slug"), help_text=_("This will be used for the name of the current PDF file."), @@ -203,12 +208,26 @@ class LiveDocument(ExtensiblePolymorphicModel): with reversion.create_revision(): super().save(*args, **kwargs) + def get_context_data(self) -> dict[str, Any]: + """Get context to pass to the PDF template.""" + return {} + def update(self, triggered_manually: bool = True): """Update the file with a new version. Has to be implemented by subclasses. """ - raise NotImplementedError("Subclasses of LiveDocument must implement update()") + if not self.template: + raise NotImplementedError("Subclasses of LiveDocument must implement update()") + + file_object, result = generate_pdf_from_template(self.template, self.get_context_data()) + with allow_join_result(): + result.wait() + file_object.refresh_from_db() + if result.status == SUCCESS and file_object.file: + self.last_update_triggered_manually = triggered_manually + self.current_file.save(self.filename, file_object.file.file) + self.save() def __str__(self) -> str: return self.name -- GitLab