X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/0bd2c341a8b55f817c2e193a6c4658d52ef95961..5158c6e72fb24c87dd8c42a8d171222f1ee1d803:/apps/catalogue/models/book.py diff --git a/apps/catalogue/models/book.py b/apps/catalogue/models/book.py index b9441c386..414d1effb 100644 --- a/apps/catalogue/models/book.py +++ b/apps/catalogue/models/book.py @@ -11,14 +11,16 @@ import django.dispatch from django.utils.datastructures import SortedDict from django.utils.translation import ugettext_lazy as _ import jsonfield +from fnpdjango.storage import BofhFileSystemStorage from catalogue import constants from catalogue.fields import EbookField from catalogue.models import Tag, Fragment, BookMedia -from catalogue.utils import create_zip, split_tags, book_upload_path, related_tag_name +from catalogue.utils import create_zip, split_tags, related_tag_name from catalogue import app_settings from catalogue import tasks from newtagging import managers +bofh_storage = BofhFileSystemStorage() permanent_cache = get_cache('permanent') @@ -43,10 +45,14 @@ class Book(models.Model): # files generated during publication cover = EbookField('cover', _('cover'), - upload_to=book_upload_path('jpg'), null=True, blank=True) + null=True, blank=True, + upload_to=lambda i, n: 'book/cover/%s.jpg' % i.slug, + storage=bofh_storage, max_length=255) # Cleaner version of cover for thumbs - cover_thumb = EbookField('cover_thumb', _('cover thumbnail'), - upload_to=book_upload_path('th.jpg'), null=True, blank=True) + cover_thumb = EbookField('cover_thumb', _('cover thumbnail'), + null=True, blank=True, + upload_to=lambda i, n: 'book/cover_thumb/%s.jpg' % i.slug, + max_length=255) ebook_formats = constants.EBOOK_FORMATS formats = ebook_formats + ['html', 'xml'] @@ -128,7 +134,7 @@ class Book(models.Model): if self.has_media(type_): if type_ in Book.formats: return getattr(self, "%s_file" % type_) - else: + else: return self.media.filter(type=type_) else: return None @@ -140,7 +146,7 @@ class Book(models.Model): def get_ogg(self): return self.get_media("ogg") def get_daisy(self): - return self.get_media("daisy") + return self.get_media("daisy") def reset_short_html(self): if self.id is None: @@ -151,7 +157,7 @@ class Book(models.Model): for fragm in self.fragments.all().iterator(): fragm.reset_short_html() - try: + try: author = self.tags.filter(category='author')[0].sort_key except IndexError: author = u'' @@ -323,7 +329,7 @@ class Book(models.Model): if 'cover' not in dont_build: book.cover.build_delay() book.cover_thumb.build_delay() - + # No saves behind this point. if has_own_text: @@ -566,7 +572,7 @@ class Book(models.Model): 'title', 'parent', 'slug') if filter: books = books.filter(filter).distinct() - + book_ids = set(b['pk'] for b in books.values("pk").iterator()) for book in books.iterator(): parent = book.parent_id @@ -582,7 +588,7 @@ class Book(models.Model): for tag in Tag.objects.filter(category='author').iterator(): books_by_author[tag] = [] - for book in books_by_parent.get(None,()): + for book in books_by_parent.get(None, ()): authors = list(book.tags.filter(category='author')) if authors: for author in authors: @@ -620,6 +626,13 @@ class Book(models.Model): # add the file fields for format_ in Book.formats: field_name = "%s_file" % format_ + upload_to = (lambda upload_path: + lambda i, n: upload_path % i.slug + )('book/%s/%%s.%s' % (format_, format_)) EbookField(format_, _("%s file" % format_.upper()), - upload_to=book_upload_path(format_), - blank=True, default='').contribute_to_class(Book, field_name) + upload_to=upload_to, + storage=bofh_storage, + max_length=255, + blank=True, + default='' + ).contribute_to_class(Book, field_name)