General A/B testing.
[wolnelektury.git] / src / catalogue / api / serializers.py
index e8f04ca..79bb58b 100644 (file)
@@ -1,7 +1,10 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from rest_framework import serializers
 from rest_framework import serializers
-from api.fields import AbsoluteURLField, LegacyMixin
+from api.fields import AbsoluteURLField, LegacyMixin, ThumbnailField
 from catalogue.models import Book, Collection, Tag, BookMedia, Fragment
 from catalogue.models import Book, Collection, Tag, BookMedia, Fragment
-from .fields import BookLiked, ThumbnailField
+from .fields import BookLiked, EmbargoURLField
 
 
 class TagSerializer(serializers.ModelSerializer):
 
 
 class TagSerializer(serializers.ModelSerializer):
@@ -24,16 +27,16 @@ class TagDetailSerializer(serializers.ModelSerializer):
         fields = ['name', 'url', 'sort_key', 'description']
 
 
         fields = ['name', 'url', 'sort_key', 'description']
 
 
-class BaseBookSerializer(LegacyMixin, serializers.ModelSerializer):
+class BookSerializer(LegacyMixin, serializers.ModelSerializer):
     author = serializers.CharField(source='author_unicode')
     kind = serializers.CharField(source='kind_unicode')
     epoch = serializers.CharField(source='epoch_unicode')
     genre = serializers.CharField(source='genre_unicode')
     author = serializers.CharField(source='author_unicode')
     kind = serializers.CharField(source='kind_unicode')
     epoch = serializers.CharField(source='epoch_unicode')
     genre = serializers.CharField(source='genre_unicode')
+    liked = BookLiked()
 
     simple_thumb = serializers.FileField(source='cover_api_thumb')
     href = AbsoluteURLField(view_name='catalogue_api_book', view_args=['slug'])
     url = AbsoluteURLField()
 
     simple_thumb = serializers.FileField(source='cover_api_thumb')
     href = AbsoluteURLField(view_name='catalogue_api_book', view_args=['slug'])
     url = AbsoluteURLField()
-    cover = serializers.CharField()
     cover_thumb = ThumbnailField('139x193', source='cover')
 
     class Meta:
     cover_thumb = ThumbnailField('139x193', source='cover')
 
     class Meta:
@@ -41,24 +44,30 @@ class BaseBookSerializer(LegacyMixin, serializers.ModelSerializer):
         fields = [
             'kind', 'full_sort_key', 'title', 'url', 'cover_color', 'author',
             'cover', 'epoch', 'href', 'has_audio', 'genre',
         fields = [
             'kind', 'full_sort_key', 'title', 'url', 'cover_color', 'author',
             'cover', 'epoch', 'href', 'has_audio', 'genre',
-            'simple_thumb', 'slug', 'cover_thumb']
+            'simple_thumb', 'slug', 'cover_thumb', 'liked']
         legacy_non_null_fields = [
             'kind', 'author', 'epoch', 'genre',
             'cover', 'simple_thumb', 'cover_thumb']
 
 
         legacy_non_null_fields = [
             'kind', 'author', 'epoch', 'genre',
             'cover', 'simple_thumb', 'cover_thumb']
 
 
-class BookSerializer(BaseBookSerializer):
-    liked = BookLiked()
-    cover = serializers.FileField()
+class BookListSerializer(BookSerializer):
+    cover = serializers.CharField()
+    cover_thumb = serializers.CharField()
+
+    Meta = BookSerializer.Meta
+
+
+class FilterBookListSerializer(BookListSerializer):
+    key = serializers.CharField()
 
     class Meta:
         model = Book
 
     class Meta:
         model = Book
-        fields = BaseBookSerializer.Meta.fields + ['liked']
-        legacy_non_null_fields = BaseBookSerializer.Meta.legacy_non_null_fields
+        fields = BookListSerializer.Meta.fields + ['key']
+        legacy_non_null_fields = BookListSerializer.Meta.legacy_non_null_fields
 
 
 class MediaSerializer(LegacyMixin, serializers.ModelSerializer):
 
 
 class MediaSerializer(LegacyMixin, serializers.ModelSerializer):
-    url = serializers.FileField(source='file')
+    url = EmbargoURLField(source='file_url')
 
     class Meta:
         model = BookMedia
 
     class Meta:
         model = BookMedia
@@ -78,13 +87,13 @@ class BookDetailSerializer(LegacyMixin, serializers.ModelSerializer):
     parent = BookSerializer()
     children = BookSerializer(many=True)
 
     parent = BookSerializer()
     children = BookSerializer(many=True)
 
-    xml = AbsoluteURLField(source='xml_url')
-    html = AbsoluteURLField(source='html_url')
-    txt = AbsoluteURLField(source='txt_url')
-    fb2 = AbsoluteURLField(source='fb2_url')
-    epub = AbsoluteURLField(source='epub_url')
-    mobi = AbsoluteURLField(source='mobi_url')
-    pdf = AbsoluteURLField(source='pdf_url')
+    xml = EmbargoURLField(source='xml_url')
+    html = EmbargoURLField(source='html_url')
+    txt = EmbargoURLField(source='txt_url')
+    fb2 = EmbargoURLField(source='fb2_url')
+    epub = EmbargoURLField(source='epub_url')
+    mobi = EmbargoURLField(source='mobi_url')
+    pdf = EmbargoURLField(source='pdf_url')
     media = MediaSerializer(many=True)
     cover_thumb = ThumbnailField('139x193', source='cover')
     simple_thumb = serializers.FileField(source='cover_api_thumb')
     media = MediaSerializer(many=True)
     cover_thumb = ThumbnailField('139x193', source='cover')
     simple_thumb = serializers.FileField(source='cover_api_thumb')
@@ -109,7 +118,13 @@ class BookPreviewSerializer(BookDetailSerializer):
         legacy_non_null_fields = BookDetailSerializer.Meta.legacy_non_null_fields
 
 
         legacy_non_null_fields = BookDetailSerializer.Meta.legacy_non_null_fields
 
 
-class EbookSerializer(BookSerializer):
+class EbookSerializer(BookListSerializer):
+    txt = EmbargoURLField(source='txt_url')
+    fb2 = EmbargoURLField(source='fb2_url')
+    epub = EmbargoURLField(source='epub_url')
+    mobi = EmbargoURLField(source='mobi_url')
+    pdf = EmbargoURLField(source='pdf_url')
+
     class Meta:
         model = Book
         fields = ['author', 'href', 'title', 'cover', 'slug'] + Book.ebook_formats
     class Meta:
         model = Book
         fields = ['author', 'href', 'title', 'cover', 'slug'] + Book.ebook_formats