importbooks: no-build-epub and wait-until options
[wolnelektury.git] / apps / catalogue / models.py
index 54a9152..5f7eb17 100644 (file)
@@ -345,7 +345,7 @@ class Book(models.Model):
 
         epub_file = StringIO()
         try:
-            epub.transform(BookImportDocProvider(self), self.slug, epub_file)
+            epub.transform(BookImportDocProvider(self), self.slug, output_file=epub_file)
             self.epub_file.save('%s.epub' % self.slug, ContentFile(epub_file.getvalue()), save=False)
             self.save()
             FileRecord(slug=self.slug, type='epub', sha1=sha1(epub_file.getvalue()).hexdigest()).save()
@@ -363,7 +363,7 @@ class Book(models.Model):
 
 
     @classmethod
-    def from_xml_file(cls, xml_file, overwrite=False):
+    def from_xml_file(cls, xml_file, overwrite=False, build_epub=True):
         # use librarian to parse meta-data
         book_info = dcparser.parse(xml_file)
 
@@ -371,12 +371,12 @@ class Book(models.Model):
             xml_file = File(open(xml_file))
 
         try:
-            return cls.from_text_and_meta(xml_file, book_info, overwrite)
+            return cls.from_text_and_meta(xml_file, book_info, overwrite, build_epub=build_epub)
         finally:
             xml_file.close()
 
     @classmethod
-    def from_text_and_meta(cls, raw_file, book_info, overwrite=False):
+    def from_text_and_meta(cls, raw_file, book_info, overwrite=False, build_epub=True):
         from tempfile import NamedTemporaryFile
         from slughifi import slughifi
         from markupstring import MarkupString
@@ -480,7 +480,8 @@ class Book(models.Model):
                 new_fragment.save()
                 new_fragment.tags = set(book_tags + themes + [book_tag] + ancestor_tags)
 
-        if not book.parent:
+        if build_epub and not book.parent:
+            print 'epub'
             book.build_epub(remove_descendants=False)
 
         book_descendants = list(book.children.all())
@@ -548,6 +549,22 @@ class Book(models.Model):
             return self.refresh_theme_counter()
         return dict((int(k), v) for k, v in self.get__theme_counter_value().iteritems())
 
+    def pretty_title(self, html_links=False):
+        book = self
+        names = list(book.tags.filter(category='author'))
+
+        books = []
+        while book:
+            books.append(book)
+            book = book.parent
+        names.extend(reversed(books))
+
+        if html_links:
+            names = ['<a href="%s">%s</a>' % (tag.get_absolute_url(), tag.name) for tag in names]
+        else:
+            names = [tag.name for tag in names]
+
+        return ', '.join(names)
 
 
 class Fragment(models.Model):