From 8bb87b3bec7127941318d5403bedacb441b472b3 Mon Sep 17 00:00:00 2001 From: Radek Czajka Date: Wed, 12 Nov 2025 12:13:42 +0100 Subject: [PATCH] sync data in api --- src/catalogue/api/serializers.py | 2 +- src/catalogue/api/urls2.py | 3 +++ src/catalogue/api/views.py | 10 ++++++++++ src/catalogue/models/book.py | 2 ++ 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/catalogue/api/serializers.py b/src/catalogue/api/serializers.py index 609fa7467..617ebe854 100644 --- a/src/catalogue/api/serializers.py +++ b/src/catalogue/api/serializers.py @@ -169,7 +169,7 @@ class BookSerializer2(serializers.ModelSerializer): 'cover_thumb', 'cover', 'isbn_pdf', 'isbn_epub', 'isbn_mobi', 'abstract', - 'has_mp3_file', + 'has_mp3_file', 'has_sync_file', ] class BookSerializer11Labs(serializers.ModelSerializer): diff --git a/src/catalogue/api/urls2.py b/src/catalogue/api/urls2.py index ad96d7a51..46f2a36b5 100644 --- a/src/catalogue/api/urls2.py +++ b/src/catalogue/api/urls2.py @@ -28,6 +28,9 @@ urlpatterns = [ ), path('books/.json', views.BookJsonView.as_view()), + path('books//sync/', + views.BookSyncView.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 ed5d10f1d..941b122bd 100644 --- a/src/catalogue/api/views.py +++ b/src/catalogue/api/views.py @@ -251,6 +251,15 @@ class BookDetail2(RetrieveAPIView): serializer_class = serializers.BookSerializer2 +class BookSyncView(RetrieveAPIView): + queryset = Book.objects.all() + lookup_field = 'slug' + + def retrieve(self, request, *args, **kwargs): + instance = self.get_object() + return Response(json.loads(instance.get_sync())) + + @vary_on_auth # Because of embargo links. class EbookList(BookList): serializer_class = serializers.EbookSerializer @@ -546,6 +555,7 @@ class BookMediaView(ListAPIView): from .tojson import conv from lxml import etree from rest_framework.views import APIView + class BookJsonView(APIView): def get(self, request, slug): book = get_object_or_404(Book, slug=slug) diff --git a/src/catalogue/models/book.py b/src/catalogue/models/book.py index b2148e6b4..35ca3c1f9 100644 --- a/src/catalogue/models/book.py +++ b/src/catalogue/models/book.py @@ -473,6 +473,8 @@ class Book(models.Model): def get_sync(self): + if not self.has_sync_file(): + return '[]' with self.get_media('sync').first().file.open('r') as f: sync = f.read().split('\n') offset = float(sync[0]) -- 2.20.1