cover thumb with no box for api
authorJan Szejko <janek37@gmail.com>
Thu, 21 Dec 2017 13:23:54 +0000 (14:23 +0100)
committerJan Szejko <janek37@gmail.com>
Thu, 21 Dec 2017 14:14:19 +0000 (15:14 +0100)
lib/librarian
src/api/handlers.py
src/catalogue/fields.py
src/catalogue/migrations/0020_book_cover_api_thumb.py [new file with mode: 0644]
src/catalogue/models/book.py

index fa42894..f4fdb08 160000 (submodule)
@@ -1 +1 @@
-Subproject commit fa42894ec06a78183d736608613c9a96fec2c400
+Subproject commit f4fdb08e0b0ff0da9faed1ac5d89a1523cad7271
index a1e9f6a..f7b3086 100644 (file)
@@ -145,6 +145,10 @@ class BookDetails(object):
         return MEDIA_BASE + default.backend.get_thumbnail(
                     book.cover, "139x193").url if book.cover else ''
 
+    @classmethod
+    def simple_thumb(cls, book):
+        return MEDIA_BASE + book.cover_api_thumb.url if book.cover_api_thumb else ''
+
     @classmethod
     def cover_source_image(cls, book):
         url = book.cover_source()
@@ -158,7 +162,7 @@ class BookDetailHandler(BaseHandler, BookDetails):
     """
     allowed_methods = ['GET']
     fields = ['title', 'parent', 'children'] + Book.formats + [
-        'media', 'url', 'cover', 'cover_thumb', 'fragment_data'] + [
+        'media', 'url', 'cover', 'cover_thumb', 'simple_thumb', 'fragment_data'] + [
             category_plural[c] for c in book_tag_categories]
 
     @piwik_track
@@ -177,7 +181,7 @@ class AnonymousBooksHandler(AnonymousBaseHandler, BookDetails):
     """
     allowed_methods = ('GET',)
     model = Book
-    fields = book_tag_categories + ['href', 'title', 'url', 'cover', 'cover_thumb', 'slug']
+    fields = book_tag_categories + ['href', 'title', 'url', 'cover', 'cover_thumb', 'slug', 'simple_thumb']
 
     @classmethod
     def genres(cls, book):
@@ -301,7 +305,7 @@ class QuerySetProxy(models.QuerySet):
 
 class FilterBooksHandler(AnonymousBooksHandler):
     fields = book_tag_categories + [
-        'href', 'title', 'url', 'cover', 'cover_thumb', 'slug', 'key', 'cover_source_image']
+        'href', 'title', 'url', 'cover', 'cover_thumb', 'simple_thumb', 'slug', 'key', 'cover_source_image']
 
     def read(self, request):
         key_sep = '$'
index 372cf27..8b28f1c 100644 (file)
@@ -244,6 +244,15 @@ class BuildCoverThumb(BuildEbook):
         return WLCover(wldoc.book_info, height=193).output_file()
 
 
+@BuildEbook.register('cover_api_thumb')
+@task(ignore_result=True)
+class BuildCoverApiThumb(BuildEbook):
+    @classmethod
+    def transform(cls, wldoc, fieldfile):
+        from librarian.cover import WLNoBoxCover
+        return WLNoBoxCover(wldoc.book_info, height=500).output_file()
+
+
 # not used, but needed for migrations
 class OverwritingFieldFile(FieldFile):
     """
diff --git a/src/catalogue/migrations/0020_book_cover_api_thumb.py b/src/catalogue/migrations/0020_book_cover_api_thumb.py
new file mode 100644 (file)
index 0000000..45db58d
--- /dev/null
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import catalogue.fields
+import catalogue.models.book
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('catalogue', '0019_auto_20171221_1107'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='book',
+            name='cover_api_thumb',
+            field=catalogue.fields.EbookField(b'cover_api_thumb', max_length=255, upload_to=catalogue.models.book.UploadToPath(b'book/cover_api_thumb/%s.jpg'), null=True, verbose_name='cover thumbnail for API', blank=True),
+        ),
+    ]
index 44ee02e..cdb1100 100644 (file)
@@ -14,6 +14,7 @@ import django.dispatch
 from django.contrib.contenttypes.fields import GenericRelation
 from django.core.urlresolvers import reverse
 from django.utils.translation import ugettext_lazy as _, get_language
+from django.utils.deconstruct import deconstructible
 import jsonfield
 from fnpdjango.storage import BofhFileSystemStorage
 from ssify import flush_ssi_includes
@@ -30,18 +31,22 @@ from wolnelektury.utils import makedirs
 bofh_storage = BofhFileSystemStorage()
 
 
-def _make_upload_to(path):
-    def _upload_to(i, n):
-        return path % i.slug
-    return _upload_to
+@deconstructible
+class UploadToPath(object):
+    def __init__(self, path):
+        self.path = path
 
+    def __call__(self, instance, filename):
+        return self.path % instance.slug
 
-_cover_upload_to = _make_upload_to('book/cover/%s.jpg')
-_cover_thumb_upload_to = _make_upload_to('book/cover_thumb/%s.jpg')
+
+_cover_upload_to = UploadToPath('book/cover/%s.jpg')
+_cover_thumb_upload_to = UploadToPath('book/cover_thumb/%s.jpg')
+_cover_api_thumb_opload_to = UploadToPath('book/cover_api_thumb/%s.jpg')
 
 
 def _ebook_upload_to(upload_path):
-    return _make_upload_to(upload_path)
+    return UploadToPath(upload_path)
 
 
 class Book(models.Model):
@@ -75,6 +80,11 @@ class Book(models.Model):
         null=True, blank=True,
         upload_to=_cover_thumb_upload_to,
         max_length=255)
+    cover_api_thumb = EbookField(
+        'cover_api_thumb', _('cover thumbnail for API'),
+        null=True, blank=True,
+        upload_to=_cover_api_thumb_opload_to,
+        max_length=255)
     ebook_formats = constants.EBOOK_FORMATS
     formats = ebook_formats + ['html', 'xml']
 
@@ -429,6 +439,7 @@ class Book(models.Model):
         if 'cover' not in dont_build:
             book.cover.build_delay()
             book.cover_thumb.build_delay()
+            book.cover_api_thumb.build_delay()
 
         # Build HTML and ebooks.
         book.html_file.build_delay()
@@ -531,6 +542,7 @@ class Book(models.Model):
             if 'cover' not in app_settings.DONT_BUILD:
                 self.cover.build_delay()
                 self.cover_thumb.build_delay()
+                self.cover_api_thumb.build_delay()
             for format_ in constants.EBOOK_FORMATS_WITH_COVERS:
                 if format_ not in app_settings.DONT_BUILD:
                     getattr(self, '%s_file' % format_).build_delay()