82f67de9e30e46f18e9074ca5dab52d1a65263e6
[wolnelektury.git] / src / bookmarks / api / views.py
1 from api.utils import never_cache
2
3 from django.http import Http404, JsonResponse
4 from django.shortcuts import render, get_object_or_404
5 from django.views.decorators import cache
6 import catalogue.models
7 from wolnelektury.utils import is_ajax
8 from bookmarks import models
9 from lxml import html
10 import re
11 from rest_framework.generics import ListAPIView, ListCreateAPIView, RetrieveUpdateDestroyAPIView
12 from rest_framework import serializers
13 from rest_framework.permissions import IsAuthenticated
14 from api.fields import AbsoluteURLField
15
16
17 class BookmarkSerializer(serializers.ModelSerializer):
18     book = serializers.SlugRelatedField(queryset=catalogue.models.Book.objects.all(), slug_field='slug')
19     href = AbsoluteURLField(view_name='api_bookmark', view_args=['uuid'])
20     
21     class Meta:
22         model = models.Bookmark
23         fields = ['book', 'anchor', 'note', 'href', 'uuid']
24         read_only_fields = ['uuid']
25
26
27
28 @never_cache
29 class BookmarksView(ListCreateAPIView):
30     permission_classes = [IsAuthenticated]
31     serializer_class = BookmarkSerializer
32
33     def get_queryset(self):
34         return self.request.user.bookmark_set.all()
35
36     def perform_create(self, serializer):
37         serializer.save(user=self.request.user)
38
39
40 @never_cache
41 class BookBookmarksView(ListAPIView):
42     permission_classes = [IsAuthenticated]
43     serializer_class = BookmarkSerializer
44     pagination_class = None
45
46     def get_queryset(self):
47         return self.request.user.bookmark_set.filter(book__slug=self.kwargs['book'])
48
49
50 @never_cache
51 class BookmarkView(RetrieveUpdateDestroyAPIView):
52     permission_classes = [IsAuthenticated]
53     serializer_class = BookmarkSerializer
54     lookup_field = 'uuid'
55
56     def get_queryset(self):
57         return self.request.user.bookmark_set.all()