X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/2d538a50605add2666172861744229599487f1b2..491078616e2129745f300c1f0357f5bac52e801d:/src/documents/models/book.py?ds=sidebyside diff --git a/src/documents/models/book.py b/src/documents/models/book.py index c11862ba..293d2c4e 100644 --- a/src/documents/models/book.py +++ b/src/documents/models/book.py @@ -23,6 +23,7 @@ from io import BytesIO import os import shutil import re +from urllib.parse import urljoin class Book(models.Model): @@ -46,18 +47,20 @@ class Book(models.Model): db_index=True, on_delete=models.SET_NULL, editable=False) dc = models.JSONField(null=True, editable=False) cover = models.FileField(blank=True, upload_to='documents/cover') + + dc_slug = models.CharField( + max_length=2048, + null=True, blank=True, + editable=False, + ) catalogue_book = models.ForeignKey( 'catalogue.Book', - models.DO_NOTHING, - to_field='slug', + models.PROTECT, null=True, blank=True, - db_constraint=False, - editable=False, db_index=True, + editable=False, related_name='document_books', related_query_name='document_book', ) - legimi_id = models.CharField(max_length=255, blank=True) - woblink_id = models.CharField(max_length=255, blank=True) class NoTextError(BaseException): pass @@ -288,7 +291,7 @@ class Book(models.Model): try: changes = self.get_current_changes(publishable=True) except self.NoTextError: - raise AssertionError(_('Not all chunks have publishable revisions.')) + raise AssertionError(_('Not all chunks have approved revisions.')) from librarian import NoDublinCore, ParseError, ValidationError @@ -367,20 +370,20 @@ class Book(models.Model): def refresh_dc_cache(self): update = { - 'catalogue_book_id': None, + 'dc_slug': None, 'dc_cover_image': None, } info = self.book_info() if info is not None: - update['catalogue_book_id'] = info.url.slug + update['dc_slug'] = info.url.slug if info.cover_source: try: image = Image.objects.get(pk=int(info.cover_source.rstrip('/').rsplit('/', 1)[-1])) except: pass else: - if info.cover_source == image.get_full_url(): + if info.cover_source.rstrip('/') == image.get_full_url().rstrip('/'): update['dc_cover_image'] = image update['dc'] = info.to_dict() Book.objects.filter(pk=self.pk).update(**update) @@ -401,7 +404,11 @@ class Book(models.Model): try: xml = self.materialize(publishable=True).encode('utf-8') info = BookInfo.from_bytes(xml) - cover = make_cover(info, width=width, height=height) + kwargs = {} + if self.project is not None: + if self.project.logo_mono or self.project.logo: + kwargs['cover_logo'] = (self.project.logo_mono or self.project.logo).path + cover = make_cover(info, width=width, height=height, **kwargs) out = BytesIO() ext = cover.ext() cover.save(out) @@ -466,6 +473,19 @@ class Book(models.Model): if not fake: book_xml = self.materialize(changes=changes) data = {"book_xml": book_xml, "days": days, "hidden": hidden} + if self.project is not None: + if self.project.logo: + data['logo'] = urljoin( + 'https://' + Site.objects.get_current().domain, + self.project.logo.url, + ) + if self.project.logo_mono: + data['logo_mono'] = urljoin( + 'https://' + Site.objects.get_current().domain, + self.project.logo_mono.url, + ) + if self.project.logo_alt: + data['logo_alt'] = self.project.logo_alt if host: data['gallery_url'] = host + self.gallery_url() apiclient.api_call(user, "books/", data, beta=beta)