X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/8952b9530d943655e552ea660c47e850123c5105..9a5e7a1f45c46fbf3509cb660e29806e7ca05a8d:/src/catalogue/api/views.py diff --git a/src/catalogue/api/views.py b/src/catalogue/api/views.py index c70a73ed0..8b0dc1afc 100644 --- a/src/catalogue/api/views.py +++ b/src/catalogue/api/views.py @@ -2,6 +2,8 @@ # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. # import json +import os.path +from django.conf import settings from django.http import Http404, HttpResponse from django.utils.decorators import method_decorator from django.views.decorators.cache import never_cache @@ -42,6 +44,16 @@ class BookList(ListAPIView): queryset = Book.objects.none() # Required for DjangoModelPermissions serializer_class = serializers.BookListSerializer + def get(self, request, filename=None, **kwargs): + if filename and not kwargs.get('tags') and 'count' not in request.query_params: + try: + with open(os.path.join(settings.MEDIA_ROOT, 'api', '%s.%s' % (filename, request.accepted_renderer.format)), 'rb') as f: + content = f.read() + return HttpResponse(content, content_type=request.accepted_media_type) + except: + pass + return super().get(request, filename=filename, **kwargs) + def get_queryset(self): try: tags, ancestors = read_tags( @@ -70,6 +82,7 @@ class BookList(ListAPIView): books = Book.tagged.with_all(tags) else: books = Book.objects.all() + books = books.filter(findable=True) books = order_books(books, new_api) if not Membership.is_active_for(self.request.user): @@ -187,6 +200,7 @@ class FilterBookList(ListAPIView): after = self.request.query_params.get('after') count = int(self.request.query_params.get('count', 50)) books = order_books(Book.objects.distinct(), new_api) + books = books.filter(findable=True) if is_lektura is not None: books = books.filter(has_audience=is_lektura) if is_audiobook is not None: @@ -293,7 +307,7 @@ class FragmentList(ListAPIView): ) except ValueError: raise Http404 - return Fragment.tagged.with_all(tags).select_related('book') + return Fragment.tagged.with_all(tags).filter(book__findable=True).select_related('book') @vary_on_auth # Because of 'liked'.