X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/b74fa4eb15c62d11fe0fa2b1015571c90681dd86..159b148e9d37274930d6c0f76c365d333f16fd87:/src/catalogue/api/views.py diff --git a/src/catalogue/api/views.py b/src/catalogue/api/views.py index 4e2d4f902..7c4b88825 100644 --- a/src/catalogue/api/views.py +++ b/src/catalogue/api/views.py @@ -14,7 +14,7 @@ from api.utils import vary_on_auth from .helpers import books_after, order_books from . import serializers from catalogue.forms import BookImportForm -from catalogue.models import Book, Collection, Tag, Fragment +from catalogue.models import Book, Collection, Tag, Fragment, BookMedia from catalogue.models.tag import prefetch_relations from wolnelektury.utils import re_escape @@ -52,6 +52,11 @@ class BookList(ListAPIView): new_api = self.request.query_params.get('new_api') after = self.request.query_params.get('after', self.kwargs.get('after')) count = self.request.query_params.get('count', self.kwargs.get('count')) + if count: + try: + count = int(count) + except TypeError: + raise Http404 # Fixme if tags: if self.kwargs.get('top_level'): @@ -90,7 +95,12 @@ class BookList(ListAPIView): return books def post(self, request, **kwargs): - # Permission needed. + if kwargs.get('audiobooks'): + return self.post_audiobook(request, **kwargs) + else: + return self.post_book(request, **kwargs) + + def post_book(self, request, **kwargs): data = json.loads(request.POST.get('data')) form = BookImportForm(data) if form.is_valid(): @@ -99,6 +109,30 @@ class BookList(ListAPIView): else: raise Http404 + 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', '') + + _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.file.save(None, request.data['file'], save=False) + bm.save(parts_count=parts_count) + + return Response({}, status=status.HTTP_201_CREATED) + @vary_on_auth # Because of 'liked'. class BookDetail(RetrieveAPIView):