1 from django.utils.decorators import method_decorator
2 from django.views.decorators.cache import never_cache
3 from rest_framework.generics import (ListAPIView, get_object_or_404)
4 from rest_framework import serializers
5 from api.fields import AbsoluteURLField
6 from catalogue.models import Book
7 from catalogue.api.fields import EmbargoURLField
8 from catalogue.api.serializers import BookSerializer2
9 from partners import models
14 class PartnerBookSerializer(BookSerializer2):
15 price = serializers.SerializerMethodField()
20 'slug', 'title', 'full_sort_key',
21 'href', 'url', 'language',
22 'authors', 'translators',
23 'epochs', 'genres', 'kinds',
26 'epub', 'mobi', 'pdf', 'html', 'txt', 'fb2', 'xml',
27 'cover_thumb', 'cover',
28 'isbn_pdf', 'isbn_epub', 'isbn_mobi',
30 'has_mp3_file', 'has_sync_file',
31 'elevenreader_link', 'content_warnings', 'audiences',
32 'changed_at', 'read_time', 'pages', 'redakcja',
36 def get_price(self, obj):
39 return self.context['partner'].get_price(obj.pages)
42 class PartnerAudiobookSerializer(BookSerializer2):
43 price = serializers.SerializerMethodField()
44 duration = serializers.SerializerMethodField()
45 files = serializers.SerializerMethodField()
51 'href', 'url', 'language',
52 'authors', 'translators',
53 'epochs', 'genres', 'kinds',
58 'content_warnings', 'audiences',
59 'changed_at', 'duration',
63 def get_duration(self, obj):
64 return obj.get_audiobooks(True)[2]
66 def get_files(self, obj):
67 def get_for_single(b):
69 for m in b.media.filter(type='mp3'):
72 "part_name": m.part_name,
73 "url": 'https://wolnelektury.pl' + m.file.url,
75 for c in b.get_children():
76 fs.extend(get_for_single(c))
78 return get_for_single(obj)
80 def get_price(self, obj):
81 duration = obj.get_audiobooks(True, True)[2]
85 return self.context['partner'].get_audio_price(obj.pages)
88 @method_decorator(never_cache, name='dispatch')
89 class PartnerBooksView(ListAPIView):
90 serializer_class = PartnerBookSerializer
92 def get_serializer_context(self):
93 ctx = super().get_serializer_context()
94 ctx['partner'] = get_object_or_404(models.Partner, key=self.kwargs['key'])
97 def get_queryset(self):
98 return Book.objects.filter(parent=None).filter(can_sell=True).exclude(pages=None)
101 @method_decorator(never_cache, name='dispatch')
102 class PartnerAudiobooksView(ListAPIView):
103 serializer_class = PartnerAudiobookSerializer
105 def get_serializer_context(self):
106 ctx = super().get_serializer_context()
107 ctx['partner'] = get_object_or_404(models.Partner, key=self.kwargs['key'])
110 def get_queryset(self):
111 return Book.objects.filter(parent=None, can_sell_mp3=True).exclude(isbn_mp3='')