Admin club counters.
[wolnelektury.git] / src / catalogue / api / views.py
index 68626e6..89fafd0 100644 (file)
@@ -11,14 +11,14 @@ from rest_framework.response import Response
 from rest_framework import status
 from api.handlers import read_tags
 from api.utils import vary_on_auth
-from club.models import Membership
-from .helpers import books_after, order_books
-from . import serializers
 from catalogue.forms import BookImportForm
 from catalogue.models import Book, Collection, Tag, Fragment, BookMedia
 from catalogue.models.tag import prefetch_relations
+from club.models import Membership
 from club.permissions import IsClubMember
 from wolnelektury.utils import re_escape
+from .helpers import books_after, order_books
+from . import serializers
 
 
 book_tag_categories = ['author', 'epoch', 'kind', 'genre']
@@ -70,6 +70,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):
@@ -159,7 +160,7 @@ class Preview(ListAPIView):
     def get_queryset(self):
         qs = Book.objects.filter(preview=True)
         # FIXME: temporary workaround for a problem with iOS app; see #3954.
-        if 'Darwin' in self.request.META['HTTP_USER_AGENT'] and 'debug' not in self.request.GET:
+        if 'Darwin' in self.request.META.get('HTTP_USER_AGENT', '') and 'debug' not in self.request.GET:
             qs = qs.none()
         return qs
 
@@ -187,6 +188,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 +295,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'.