#
from django.conf import settings
from django.core.files import File
+from django.core.files.storage import FileSystemStorage
from django.db import models
from django.db.models.fields.files import FieldFile
from catalogue import app_settings
from catalogue.constants import LANGUAGES_3TO2
-from catalogue.utils import remove_zip, truncate_html_words
+from catalogue.utils import remove_zip, truncate_html_words, gallery_path, gallery_url
from celery.task import Task, task
from celery.utils.log import get_task_logger
from waiter.utils import clear_cache
class BuildPdf(BuildEbook):
@staticmethod
def transform(wldoc, fieldfile):
- return wldoc.as_pdf(morefloats=settings.LIBRARIAN_PDF_MOREFLOATS, cover=True)
+ return wldoc.as_pdf(morefloats=settings.LIBRARIAN_PDF_MOREFLOATS, cover=True,
+ ilustr_path=gallery_path(wldoc.book_info.url.slug))
def build(self, fieldfile):
BuildEbook.build(self, fieldfile)
class BuildEpub(BuildEbook):
@staticmethod
def transform(wldoc, fieldfile):
- return wldoc.as_epub(cover=True)
+ return wldoc.as_epub(cover=True, ilustr_path=gallery_path(wldoc.book_info.url.slug))
+
+
+@BuildEbook.register('mobi')
+@task(ignore_result=True)
+class BuildMobi(BuildEbook):
+ @staticmethod
+ def transform(wldoc, fieldfile):
+ return wldoc.as_mobi(cover=True, ilustr_path=gallery_path(wldoc.book_info.url.slug))
@BuildEbook.register('html')
book = fieldfile.instance
- html_output = self.transform(
- book.wldocument(parse_dublincore=False),
- fieldfile)
+ html_output = self.transform(book.wldocument(parse_dublincore=False), fieldfile)
# Delete old fragments, create from scratch if necessary.
book.fragments.all().delete()
return True
return False
+ @staticmethod
+ def transform(wldoc, fieldfile):
+ # ugly, but we can't use wldoc.book_info here
+ from librarian import DCNS
+ url_elem = wldoc.edoc.getroot().find('.//' + DCNS('identifier.url'))
+ if url_elem is None:
+ gallery = ''
+ else:
+ gallery = gallery_url(slug=url_elem.text.rsplit('/', 1)[1])
+ return wldoc.as_html(options={'gallery': "'%s'" % gallery})
+
@BuildEbook.register('cover_thumb')
@task(ignore_result=True)
return WLCover(wldoc.book_info, height=193).output_file()
+# not used, but needed for migrations
class OverwritingFieldFile(FieldFile):
"""
Deletes the old file before saving the new one.
class OverwritingFileField(models.FileField):
attr_class = OverwritingFieldFile
+
+
+class OverwriteStorage(FileSystemStorage):
+
+ def get_available_name(self, name, max_length=None):
+ self.delete(name)
+ return name