From 5d5e3c6d74eec500d43eedd6d4141078372acbe6 Mon Sep 17 00:00:00 2001 From: Guillaume Pellerin Date: Fri, 1 May 2015 16:43:01 +0200 Subject: [PATCH] put epub in cache, add TelemetaBaseMixin --- telemeta/views/core.py | 7 ++++++- telemeta/views/item.py | 4 +--- telemeta/views/resource.py | 14 +++++++------- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/telemeta/views/core.py b/telemeta/views/core.py index a8f518ab..28fccc2f 100644 --- a/telemeta/views/core.py +++ b/telemeta/views/core.py @@ -95,7 +95,12 @@ import jqchat.models mods = {'item': MediaItem, 'collection': MediaCollection, 'corpus': MediaCorpus, 'fonds': MediaFonds, 'marker': MediaItemMarker, } -# TOOLS + +class TelemetaBaseMixin(object): + + cache_data = TelemetaCache(settings.TELEMETA_DATA_CACHE_DIR) + cache_export = TelemetaCache(settings.TELEMETA_EXPORT_CACHE_DIR) + class FixedFileWrapper(FileWrapper): def __iter__(self): diff --git a/telemeta/views/item.py b/telemeta/views/item.py index 24c91248..cc047e71 100644 --- a/telemeta/views/item.py +++ b/telemeta/views/item.py @@ -41,15 +41,13 @@ from telemeta.views.marker import * import timeside.core -class ItemBaseMixin(object): +class ItemBaseMixin(TelemetaBaseMixin): graphers = timeside.core.processor.processors(timeside.core.api.IGrapher) decoders = timeside.core.processor.processors(timeside.core.api.IDecoder) encoders = timeside.core.processor.processors(timeside.core.api.IEncoder) analyzers = timeside.core.processor.processors(timeside.core.api.IAnalyzer) value_analyzers = timeside.core.processor.processors(timeside.core.api.IValueAnalyzer) - cache_data = TelemetaCache(settings.TELEMETA_DATA_CACHE_DIR) - cache_export = TelemetaCache(settings.TELEMETA_EXPORT_CACHE_DIR) export_enabled = getattr(settings, 'TELEMETA_DOWNLOAD_ENABLED', True) export_formats = getattr(settings, 'TELEMETA_DOWNLOAD_FORMATS', ('mp3', 'wav')) diff --git a/telemeta/views/resource.py b/telemeta/views/resource.py index 73ea30d0..dba2bd4c 100644 --- a/telemeta/views/resource.py +++ b/telemeta/views/resource.py @@ -356,7 +356,8 @@ def cleanup_path(path): return os.sep.join(new_path) -class CorpusEpubView(View): +class CorpusEpubView(TelemetaBaseMixin, View): + "Download corpus data embedded in an EPUB3 file" model = MediaCorpus @@ -364,9 +365,6 @@ class CorpusEpubView(View): return MediaCorpus.objects.get(public_id=self.kwargs['public_id']) def get(self, request, *args, **kwargs): - """ - Stream an Epub file of collection data - """ from collections import OrderedDict from ebooklib import epub from django.template.loader import render_to_string @@ -442,15 +440,17 @@ class CorpusEpubView(View): book.spine = chapters # create epub file - filename = '/tmp/test.epub' + epub_name = corpus.code + '.epub' + path = self.cache_data.dir + os.sep + epub_name epub.write_epub(filename, book, {}) epub_file = open(filename, 'rb') response = HttpResponse(epub_file.read(), content_type='application/epub+zip') - response['Content-Disposition'] = "attachment; filename=%s.%s" % \ - (collection.code, 'epub') + response['Content-Disposition'] = "attachment; filename=%s" % epub_name + return response @method_decorator(login_required) def dispatch(self, *args, **kwargs): return super(CorpusEpubView, self).dispatch(*args, **kwargs) + -- 2.39.5