Beispiel #1
0
    def build_epub(self, remove_descendants=True):
        """ (Re)builds the epub file.
            If book has a parent, does nothing.
            Unless remove_descendants is False, descendants' epubs are removed.
        """
    
        from StringIO import StringIO
        from hashlib import sha1
        from django.core.files.base import ContentFile
        from librarian import DocProvider

        class BookImportDocProvider(DocProvider):
            """ used for joined EPUBs """

            def __init__(self, book):
                self.book = book

            def by_slug(self, slug):
                if slug == self.book.slug:
                    return self.book.xml_file
                else:
                    return Book.objects.get(slug=slug).xml_file

        if self.parent:
            # don't need an epub
            return

        epub_file = StringIO()
        try:
            epub.transform(BookImportDocProvider(self), self.slug, output_file=epub_file)
            self.epub_file.save('%s.epub' % self.slug, ContentFile(epub_file.getvalue()))
            FileRecord(slug=self.slug, type='epub', sha1=sha1(epub_file.getvalue()).hexdigest()).save()
        except NoDublinCore:
            pass

        book_descendants = list(self.children.all())
        while len(book_descendants) > 0:
            child_book = book_descendants.pop(0)
            if remove_descendants and child_book.has_epub_file():
                child_book.epub_file.delete()
            # save anyway, to refresh short_html
            child_book.save()
            book_descendants += list(child_book.children.all())
Beispiel #2
0
 def as_epub(self, *args, **kwargs):
     from librarian import epub
     return epub.transform(self, *args, **kwargs)
Beispiel #3
0
 def as_epub(self, *args, **kwargs):
     from librarian import epub
     return epub.transform(self, *args, **kwargs)