+ def post_audiobook(self, request, **kwargs):
+ index = int(request.POST['part_index'])
+ parts_count = int(request.POST['parts_count'])
+ media_type = request.POST['type'].lower()
+ source_sha1 = request.POST.get('source_sha1')
+ name = request.POST.get('name', '')
+ part_name = request.POST.get('part_name', '')
+
+ project_description = request.POST.get('project_description', '')
+ project_icon = request.POST.get('project_icon', '')
+
+ _rest, slug = request.POST['book'].rstrip('/').rsplit('/', 1)
+ book = Book.objects.get(slug=slug)
+
+ try:
+ assert source_sha1
+ bm = book.media.get(type=media_type, source_sha1=source_sha1)
+ except (AssertionError, BookMedia.DoesNotExist):
+ bm = BookMedia(book=book, type=media_type)
+ bm.name = name
+ bm.part_name = part_name
+ bm.index = index
+ bm.project_description = project_description
+ bm.project_icon = project_icon
+ bm.file.save(None, request.data['file'], save=False)
+ bm.save(parts_count=parts_count)
+
+ return Response({}, status=status.HTTP_201_CREATED)
+
+
+class BookFilter(dfilters.FilterSet):
+ sort = dfilters.OrderingFilter(
+ fields=(
+ ('sort_key_author', 'alpha'),
+ ('popularity', 'popularity'),
+ )
+ )
+ tag = dfilters.ModelMultipleChoiceFilter(
+ field_name='tag_relations__tag',
+ queryset=Tag.objects.filter(category__in=('author', 'epoch', 'genre', 'kind')),
+ conjoined=True,
+ )
+
+
+class BookList2(ListAPIView):
+ permission_classes = [DjangoModelPermissionsOrAnonReadOnly]
+ queryset = Book.objects.none() # Required for DjangoModelPermissions
+ serializer_class = serializers.BookSerializer2
+ filter_backends = (
+ dfilters.DjangoFilterBackend,
+ filters.SearchFilter,
+ )
+ filterset_class = BookFilter
+ search_fields = [
+ 'title',
+ ]
+
+ def get_queryset(self):
+ books = Book.objects.all()
+ books = books.filter(findable=True)
+ books = order_books(books, True)
+
+ return books
+
+
+class BookList11Labs(BookList2):
+ serializer_class = serializers.BookSerializer11Labs
+
+ def get_queryset(self):
+ books = Book.objects.all()
+ books = books.filter(findable=True)
+ books = books.filter(license='')
+ books = order_books(books, True)