From e3ab2edd07579ddcee8128c362b202caa03a4578 Mon Sep 17 00:00:00 2001 From: Radek Czajka Date: Mon, 12 May 2025 09:03:40 +0200 Subject: [PATCH] audio api --- src/catalogue/api/serializers.py | 12 ++++++++++++ src/catalogue/api/urls2.py | 3 +++ src/catalogue/api/views.py | 10 ++++++++++ 3 files changed, 25 insertions(+) diff --git a/src/catalogue/api/serializers.py b/src/catalogue/api/serializers.py index a90d2ef9c..1608b0f0a 100644 --- a/src/catalogue/api/serializers.py +++ b/src/catalogue/api/serializers.py @@ -157,6 +157,7 @@ class BookSerializer2(serializers.ModelSerializer): 'cover_thumb', 'cover', 'isbn_pdf', 'isbn_epub', 'isbn_mobi', 'abstract', + 'has_mp3_file', ] class BookSerializer11Labs(serializers.ModelSerializer): @@ -190,6 +191,17 @@ class BookSerializer11Labs(serializers.ModelSerializer): ] +class MediaSerializer2(MediaSerializer): + size = serializers.SerializerMethodField() + + class Meta: + model = BookMedia + fields = ['url', 'director', 'type', 'name', 'part_name', 'artist', 'duration', 'size'] + + def get_size(self, obj): + return obj.file.size + + class BookSerializer(LegacyMixin, serializers.ModelSerializer): author = serializers.CharField(source='author_unicode') kind = serializers.CharField(source='kind_unicode') diff --git a/src/catalogue/api/urls2.py b/src/catalogue/api/urls2.py index 7dc131d23..e90e13eea 100644 --- a/src/catalogue/api/urls2.py +++ b/src/catalogue/api/urls2.py @@ -23,6 +23,9 @@ urlpatterns = [ piwik_track_view(views.BookFragmentView.as_view()), name='catalogue_api_book_fragment' ), + path('books//media//', + views.BookMediaView.as_view() + ), path('suggested-tags/', piwik_track_view(views.SuggestedTags.as_view()), diff --git a/src/catalogue/api/views.py b/src/catalogue/api/views.py index e45f80e75..821b281c4 100644 --- a/src/catalogue/api/views.py +++ b/src/catalogue/api/views.py @@ -517,3 +517,13 @@ class BookFragmentView(RetrieveAPIView): book = get_object_or_404(Book, slug=self.kwargs['slug']) return book.choose_fragment() + +class BookMediaView(ListAPIView): + serializer_class = serializers.MediaSerializer2 + pagination_class = None + + def get_queryset(self): + return BookMedia.objects.filter( + book__slug=self.kwargs['slug'], + type=self.kwargs['type'] + ).order_by('index') -- 2.20.1