HTML generation in Celery.
authorRadek Czajka <radekczajka@nowoczesnapolska.org.pl>
Fri, 18 Jul 2014 14:29:58 +0000 (16:29 +0200)
committerRadek Czajka <radekczajka@nowoczesnapolska.org.pl>
Fri, 18 Jul 2014 14:29:58 +0000 (16:29 +0200)
apps/catalogue/fields.py
apps/catalogue/models/book.py

index 6080c2a..ebf71c2 100644 (file)
@@ -146,6 +146,9 @@ class BuildHtml(BuildEbook):
         if lang not in [ln[0] for ln in settings.LANGUAGES]:
             lang = None
 
+        # Delete old fragments, create from scratch if necessary.
+        book.fragments.all().delete()
+
         if html_output:
             fieldfile.save(None, ContentFile(html_output.get_string()),
                     save=False)
@@ -160,8 +163,6 @@ class BuildHtml(BuildEbook):
                 ancestor_tags.append(p.book_tag())
                 p = p.parent
 
-            # Delete old fragments and create them from scratch
-            book.fragments.all().delete()
             # Extract fragments
             closed_fragments, open_fragments = html.extract_fragments(fieldfile.path)
             for fragment in closed_fragments.values():
@@ -205,6 +206,7 @@ class BuildHtml(BuildEbook):
 
                 new_fragment.save()
                 new_fragment.tags = set(meta_tags + themes + [book_tag] + ancestor_tags)
+            book.fix_tree_tags()
             book.html_built.send(sender=book)
             return True
         return False
index 27240fb..1ab2c42 100644 (file)
@@ -322,18 +322,16 @@ class Book(models.Model):
             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.
+        if not children:
+            book.html_file.build_delay()
             for format_ in constants.EBOOK_FORMATS_WITHOUT_CHILDREN:
                 if format_ not in dont_build:
                     getattr(book, '%s_file' % format_).build_delay()