permanent_cache = get_cache('permanent')
+def _cover_upload_to(i, n):
+ return 'book/cover/%s.jpg' % i.slug
+def _cover_thumb_upload_to(i, n):
+ return 'book/cover_thumb/%s.jpg' % i.slug,
+def _ebook_upload_to(upload_path):
+ def _upload_to(i, n):
+ return upload_path % i.slug
+ return _upload_to
+
+
class Book(models.Model):
"""Represents a book imported from WL-XML."""
title = models.CharField(_('title'), max_length=120)
cover = EbookField('cover', _('cover'),
null=True, blank=True,
- upload_to=lambda i, n: 'book/cover/%s.jpg' % i.slug,
+ upload_to=_cover_upload_to,
storage=bofh_storage, max_length=255)
# Cleaner version of cover for thumbs
cover_thumb = EbookField('cover_thumb', _('cover thumbnail'),
null=True, blank=True,
- upload_to=lambda i, n: 'book/cover_thumb/%s.jpg' % i.slug,
+ upload_to=_cover_thumb_upload_to,
max_length=255)
ebook_formats = constants.EBOOK_FORMATS
formats = ebook_formats + ['html', 'xml']
if old_cover:
notify_cover_changed.append(child)
- # delete old fragments when overwriting
- book.fragments.all().delete()
- # Build HTML, fix the tree tags, build cover.
- has_own_text = bool(book.html_file.build())
- tasks.fix_tree_tags.delay(book)
+ # No saves beyond this point.
+
+ # Build cover.
if 'cover' not in dont_build:
book.cover.build_delay()
book.cover_thumb.build_delay()
- # No saves behind this point.
-
- if has_own_text:
+ # Build HTML and ebooks.
+ book.html_file.build_delay()
+ if not children:
for format_ in constants.EBOOK_FORMATS_WITHOUT_CHILDREN:
if format_ not in dont_build:
getattr(book, '%s_file' % format_).build_delay()
# 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_))
+ upload_to = _ebook_upload_to('book/%s/%%s.%s' % (format_, format_))
EbookField(format_, _("%s file" % format_.upper()),
upload_to=upload_to,
storage=bofh_storage,