X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/0543785bb9e74989036d99eb25cf23c3ef82cdf7..1a12630094dd57a463a8a1d4f64744e3b3b245af:/src/api/handlers.py diff --git a/src/api/handlers.py b/src/api/handlers.py index c89997617..ab1a44a52 100644 --- a/src/api/handlers.py +++ b/src/api/handlers.py @@ -164,7 +164,8 @@ class BookDetailHandler(BaseHandler, BookDetails): """ allowed_methods = ['GET'] fields = ['title', 'parent', 'children'] + Book.formats + [ - 'media', 'url', 'cover', 'cover_thumb', 'simple_thumb', 'simple_cover', 'fragment_data', 'preview'] + [ + 'media', 'url', 'cover', 'cover_thumb', 'simple_thumb', 'simple_cover', 'fragment_data', 'audio_length', + 'preview'] + [ category_plural[c] for c in book_tag_categories] @piwik_track @@ -183,7 +184,7 @@ class AnonymousBooksHandler(AnonymousBaseHandler, BookDetails): """ allowed_methods = ('GET',) model = Book - fields = book_tag_categories + ['href', 'title', 'url', 'cover', 'cover_thumb', 'slug', 'simple_thumb'] + fields = book_tag_categories + ['href', 'title', 'url', 'cover', 'cover_thumb', 'slug', 'simple_thumb', 'has_audio'] @classmethod def genres(cls, book): @@ -322,7 +323,7 @@ class QuerySetProxy(models.QuerySet): class FilterBooksHandler(AnonymousBooksHandler): fields = book_tag_categories + [ - 'href', 'title', 'url', 'cover', 'cover_thumb', 'simple_thumb', 'slug', 'key'] + 'href', 'title', 'url', 'cover', 'cover_thumb', 'simple_thumb', 'has_audio', 'slug', 'key'] def parse_bool(self, s): if s in ('true', 'false'): @@ -433,6 +434,7 @@ def add_file_getters(): for book_format in Book.formats: setattr(BookDetails, book_format, _file_getter(book_format)) + add_file_getters() @@ -624,7 +626,7 @@ class FragmentsHandler(BaseHandler, FragmentDetails): """ try: - tags, ancestors = read_tags(tags, allowed=self.categories) + tags, ancestors = read_tags(tags, request, allowed=self.categories) except ValueError: return rc.NOT_FOUND fragments = Fragment.tagged.with_all(tags).select_related('book') @@ -654,16 +656,18 @@ class PictureHandler(BaseHandler): class UserDataHandler(BaseHandler): model = BookUserData - fields = ('state',) + fields = ('state', 'username') allowed_methods = ('GET', 'POST') - def read(self, request, slug): + def read(self, request, slug=None): + if not request.user.is_authenticated(): + return rc.FORBIDDEN + if slug is None: + return {'username': request.user.username} try: book = Book.objects.get(slug=slug) except Book.DoesNotExist: return rc.NOT_FOUND - if not request.user.is_authenticated(): - return rc.FORBIDDEN try: data = BookUserData.objects.get(book=book, user=request.user) except BookUserData.DoesNotExist: @@ -702,7 +706,8 @@ class UserShelfHandler(BookDetailHandler): return rc.NOT_FOUND after = request.GET.get('after') count = int(request.GET.get('count', 50)) - ids = BookUserData.objects.filter(user=request.user, complete=state == 'complete').values_list('book_id', flat=True) + ids = BookUserData.objects.filter(user=request.user, complete=state == 'complete')\ + .values_list('book_id', flat=True) books = Book.objects.filter(id__in=list(ids)).distinct().order_by('slug') if after: books = books.filter(slug__gt=after)