- def build_pdf(self, customizations=None, file_name=None):
- """ (Re)builds the pdf file.
- customizations - customizations which are passed to LaTeX class file.
- file_name - save the pdf file under a different name and DO NOT save it in db.
- """
- from tempfile import NamedTemporaryFile
- from os import unlink
- from django.core.files import File
- from librarian import pdf
- from catalogue.utils import ORMDocProvider, remove_zip
- from django.core.files.move import file_move_safe
-
- try:
- pdf_file = NamedTemporaryFile(delete=False)
- pdf.transform(ORMDocProvider(self),
- file_path=str(self.xml_file.path),
- output_file=pdf_file,
- customizations=customizations
- )
-
- if file_name is None:
- self.pdf_file.save('%s.pdf' % self.slug, File(open(pdf_file.name)))
- else:
- copy(pdf_file.name, path.join(settings.MEDIA_ROOT, get_dynamic_path(None, file_name, ext='pdf')))
- finally:
- unlink(pdf_file.name)
-
- # remove zip with all pdf files
- remove_zip(settings.ALL_PDF_ZIP)
-
- def build_mobi(self):
- """ (Re)builds the MOBI file.
-
- """
- from tempfile import NamedTemporaryFile
- from os import unlink
- from django.core.files import File
- from librarian import mobi
- from catalogue.utils import ORMDocProvider, remove_zip
-
- try:
- mobi_file = NamedTemporaryFile(suffix='.mobi', delete=False)
- mobi.transform(ORMDocProvider(self), verbose=1,
- file_path=str(self.xml_file.path),
- output_file=mobi_file.name,
- )
-
- self.mobi_file.save('%s.mobi' % self.slug, File(open(mobi_file.name)))
- finally:
- unlink(mobi_file.name)
-
- # remove zip with all mobi files
- remove_zip(settings.ALL_MOBI_ZIP)
-
- 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 epub, NoDublinCore
- from catalogue.utils import ORMDocProvider, remove_zip
-
- if self.parent:
- # don't need an epub
- return
-
- epub_file = StringIO()
- try:
- epub.transform(ORMDocProvider(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())