def build(self):
"""Build the ebook immediately."""
- return self.field.builder(self)
+ return self.field.builder.build(self)
def build_delay(self):
"""Builds the ebook in a delayed task."""
- return self.field.builder.delay(self)
+ return self.field.builder.delay(self.instance, self.field.attname)
class EbookField(models.FileField):
"""
return getattr(wldoc, "as_%s" % fieldfile.field.format_name)()
- def run(self, fieldfile):
+ def run(self, obj, field_name):
+ """Just run `build` on FieldFile, can't pass it directly to Celery."""
+ return self.build(getattr(obj, field_name))
+
+ def build(self, fieldfile):
book = fieldfile.instance
out = self.transform(book.wldocument(), fieldfile)
fieldfile.save(None, File(open(out.get_filename())), save=False)
class BuildPdf(BuildEbook):
@staticmethod
def transform(wldoc, fieldfile):
- return wldoc.as_pdf(morefloats=settings.LIBRARIAN_PDF_MOREFLOATS)
+ return wldoc.as_pdf(morefloats=settings.LIBRARIAN_PDF_MOREFLOATS,
+ cover=True)
- def run(self, fieldfile):
- BuildEbook.run(self, fieldfile)
+ def build(self, fieldfile):
+ BuildEbook.build(self, fieldfile)
clear_cache(fieldfile.instance.slug)
+@BuildEbook.register('epub')
+@task(ignore_result=True)
+class BuildEpub(BuildEbook):
+ @staticmethod
+ def transform(wldoc, fieldfile):
+ return wldoc.as_epub(cover=True)
+
+
@BuildEbook.register('html')
@task(ignore_result=True)
class BuildHtml(BuildEbook):
- def run(self, fieldfile):
+ def build(self, fieldfile):
from django.core.files.base import ContentFile
- from slughifi import slughifi
+ from fnpdjango.utils.text.slughifi import slughifi
from sortify import sortify
from librarian import html
from catalogue.models import Fragment, Tag