X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/54b3d528298bc6387e88dd48b634c94d350f1c7b..5cb736f7ca55179d06965cc9874d0b059299d933:/src/partners/api/views.py diff --git a/src/partners/api/views.py b/src/partners/api/views.py index ccae25ebd..a2e1de597 100644 --- a/src/partners/api/views.py +++ b/src/partners/api/views.py @@ -39,6 +39,52 @@ class PartnerBookSerializer(BookSerializer2): return self.context['partner'].get_price(obj.pages) +class PartnerAudiobookSerializer(BookSerializer2): + price = serializers.SerializerMethodField() + duration = serializers.SerializerMethodField() + files = serializers.SerializerMethodField() + + class Meta: + model = Book + fields = [ + 'slug', 'title', + 'href', 'url', 'language', + 'authors', 'translators', + 'epochs', 'genres', 'kinds', + 'files', + 'cover', + 'isbn_mp3', + 'abstract', + 'content_warnings', 'audiences', + 'changed_at', 'duration', + 'price', + ] + + def get_duration(self, obj): + return obj.get_audiobooks(True)[2] + + def get_files(self, obj): + def get_for_single(b): + fs = [] + for m in b.media.filter(type='mp3'): + fs.append({ + "name": m.name, + "part_name": m.part_name, + "url": 'https://wolnelektury.pl' + m.file.url, + }) + for c in b.get_children(): + fs.extend(get_for_single(c)) + return fs + return get_for_single(b) + + def get_price(self, obj): + duration = obj.get_audiobooks(True)[2] + if not duration: + return None + duration /= 60 + return self.context['partner'].get_audio_price(obj.pages) + + @method_decorator(never_cache, name='dispatch') class PartnerBooksView(ListAPIView): serializer_class = PartnerBookSerializer @@ -50,3 +96,16 @@ class PartnerBooksView(ListAPIView): def get_queryset(self): return Book.objects.filter(parent=None).filter(can_sell=True).exclude(pages=None) + + +@method_decorator(never_cache, name='dispatch') +class PartnerAudiobooksView(ListAPIView): + serializer_class = PartnerAudiobookSerializer + + def get_serializer_context(self): + ctx = super().get_serializer_context() + ctx['partner'] = get_object_or_404(models.Partner, key=self.kwargs['key']) + return ctx + + def get_queryset(self): + return Book.objects.exclude(isbn_mp3='')