if slughifi(self.name) != slughifi(old.name):
self.file.save(None, ExistingFile(self.file.path), save=False, leave=True)
+ # remove the zip package for book with modified media
+ remove_zip(self.book.slug)
+
super(BookMedia, self).save(*args, **kwargs)
extra_info = self.get_extra_info_value()
extra_info.update(self.read_meta())
from tempfile import NamedTemporaryFile
import os
+ # remove zip with all pdf files
+ remove_zip(settings.ALL_PDF_ZIP)
+
path, fname = os.path.realpath(self.xml_file.path).rsplit('/', 1)
try:
pdf_file = NamedTemporaryFile(delete=False)
# don't need an epub
return
+ # remove zip package with all epub files
+ remove_zip(settings.ALL_EPUB_ZIP)
+
epub_file = StringIO()
try:
epub.transform(BookImportDocProvider(self), self.slug, output_file=epub_file)
paths = filter(lambda x: x is not None,
map(lambda b: b.epub_file and b.epub_file.path or None, books))
- result = create_zip_task.delay(paths, settings.ALL_EPUB_ZIP)
- return settings.MEDIA_URL + result.wait()
+ if settings.USE_CELERY:
+ result = create_zip_task.delay(paths, settings.ALL_EPUB_ZIP)
+ return result.wait()
+ else:
+ result = create_zip_task(paths, settings.ALL_EPUB_ZIP)
+ return result
@staticmethod
def zip_pdf():
paths = filter(lambda x: x is not None,
map(lambda b: b.pdf_file and b.pdf_file.path or None, books))
- result = create_zip_task.delay(paths, settings.ALL_PDF_ZIP)
- return settings.MEDIA_URL + result.wait()
+ if settings.USE_CELERY:
+ result = create_zip_task.delay(paths, settings.ALL_PDF_ZIP)
+ return result.wait()
+ else:
+ result = create_zip_task(paths, settings.ALL_PDF_ZIP)
+ return result
def zip_audiobooks(self):
bm = BookMedia.objects.filter(book=self)
paths = map(lambda bm: bm.file.path, bm)
- result = create_zip_task.delay(paths, self.slug)
-
- return settings.MEDIA_URL + result.wait()
+ if settings.USE_CELERY:
+ result = create_zip_task.delay(paths, self.slug)
+ return result.wait()
+ else:
+ result = create_zip_task(paths, self.slug)
+ return result
- def clean_zip_files(self):
- remove_zip(self.slug)
- remove_zip(settings.ALL_EPUB_ZIP)
- remove_zip(settings.ALL_PDF_ZIP)
@classmethod
def from_xml_file(cls, xml_file, **kwargs):
# -*- coding: utf-8 -*-
from os.path import basename, exists, join, dirname
-from django.core.files.base import ContentFile
+from django.core.files.base import ContentFile, File
from catalogue.test_utils import *
from catalogue import models, utils
utils.remove_zip('test-zip-slug')
self.assertFalse(exists(join(settings.MEDIA_ROOT, url)))
+
+ def test_remove_zip_on_media_change(self):
+ bm = models.BookMedia(book=self.book, type='ogg', name="Title")
+ bm.file.save(None, self.file)
+ bm.save()
+
+ zip_url = self.book.zip_audiobooks()
+ self.assertEqual('zip/'+self.book.slug+'.zip', zip_url)
+ self.assertTrue(exists(join(settings.MEDIA_ROOT, zip_url)))
+
+ bm2 = models.BookMedia(book=self.book, type='ogg', name="Other title")
+ bm2.file.save(None, self.file2)
+ bm2.name = "Title"
+ bm2.save()
+ # was the audiobook zip deleted?
+ self.assertFalse(exists(join(settings.MEDIA_ROOT, zip_url)))