X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/d66f9960d12d739c44a89d1d4e013f52783097e7..3862401b670120eaebd893e2bf445ce48f4d9e75:/src/catalogue/models/book.py diff --git a/src/catalogue/models/book.py b/src/catalogue/models/book.py index 5a0f1696f..eb87f10e7 100644 --- a/src/catalogue/models/book.py +++ b/src/catalogue/models/book.py @@ -12,6 +12,7 @@ from django.conf import settings from django.db import connection, models, transaction import django.dispatch from django.contrib.contenttypes.fields import GenericRelation +from django.template.loader import render_to_string from django.urls import reverse from django.utils.translation import ugettext_lazy as _, get_language from django.utils.deconstruct import deconstructible @@ -448,6 +449,17 @@ class Book(models.Model): parse_dublincore=parse_dublincore, meta_fallbacks=meta_fallbacks) + def wldocument2(self): + from catalogue.import_utils import ORMDocProvider + from librarian.document import WLDocument + doc = WLDocument( + self.xml_file.path, + provider=ORMDocProvider(self) + ) + doc.meta.update(self.cover_info()) + return doc + + @staticmethod def zip_format(format_): def pretty_file_name(book): @@ -464,7 +476,17 @@ class Book(models.Model): def zip_audiobooks(self, format_): bm = BookMedia.objects.filter(book=self, type=format_) paths = map(lambda bm: (None, bm.file.path), bm) - return create_zip(paths, "%s_%s" % (self.slug, format_)) + licenses = set() + for m in bm: + license = constants.LICENSES.get( + m.get_extra_info_json().get('license'), {} + ).get('locative') + if license: + licenses.add(license) + readme = render_to_string('catalogue/audiobook_zip_readme.txt', { + 'licenses': licenses, + }) + return create_zip(paths, "%s_%s" % (self.slug, format_), {'informacje.txt': readme}) def search_index(self, book_info=None, index=None, index_tags=True, commit=True): if not self.findable: @@ -677,6 +699,10 @@ class Book(models.Model): entity.save() Reference.objects.filter(book=self).exclude(entity__uri__in=found).delete() + @property + def references(self): + return self.reference_set.all().select_related('entity') + @classmethod @transaction.atomic def repopulate_ancestors(cls):