Source code for eucrim.article.forms

# SPDX-FileCopyrightText: 2024 Thomas Breitner <t.breitner@csl.mpg.de>
#
# SPDX-License-Identifier: EUPL-1.2

from wagtail.admin.forms import WagtailAdminPageForm
from ..core.utils import generate_cover_image
from .utils import word2html
from .export_pdf import set_article_pdf


[docs] class ArticleForm(WagtailAdminPageForm): """ Override the standard WagtailAdminPageForm for custom validation that appears as a non-field error see: http://docs.wagtail.io/en/stable/advanced_topics/customisation/page_editing_interface.html#customising-generated-forms # noqa: E501 """
[docs] def clean(self): cleaned_data = super().clean() try: self.cleaned_data["word_file"] if self.instance.word_file != cleaned_data["word_file"]: self.cleaned_data["word_changed"] = True else: self.cleaned_data["word_changed"] = False except KeyError as error: error_msg = 'No word file available: KeyError - reason "{}"'.format(error) self.add_error("word_file", error_msg) except Exception as exception: self.add_error( "Unhandled exception related to word_file: {}".format(exception) ) # This whole cover image generation is only applicable if a pdf_file is uploaded # which in our case was only once the case. if cleaned_data.get("pdf_file"): try: _cover_obj = cleaned_data["pdf_file"] _cover_obj.seek(0) cover_image = generate_cover_image(_cover_obj) except AttributeError as e: print(f"AttributeError: Problem generating cover_image: {e=}") except Exception as e: print(f"Exception: Problem generating cover_image: {e=}") else: cleaned_data.update( { "pdf_file_cover_image": cover_image, } ) return cleaned_data
[docs] def save(self, commit=True): page = super().save(commit=False) # Convert uploaded word file to a html5 representation: word_as_html5 = word2html(self.cleaned_data) page.as_html5 = word_as_html5.as_html5 page.auto_excerpt = word_as_html5.auto_excerpt if page.pdf_file and self.cleaned_data.get("pdf_file_cover_image"): page.pdf_file_cover_image = self.cleaned_data["pdf_file_cover_image"] if commit: page.save() # We need a pk for new article_pages to attach the PDF set_article_pdf(article_page=page, save=True) page.save_revision().publish() else: set_article_pdf(article_page=page, save=False) return page