Bookmarks sync
[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(
19         queryset=catalogue.models.Book.objects.all(), slug_field='slug',
20         required=False
21     )
22     href = AbsoluteURLField(view_name='api_bookmark', view_args=['uuid'])
23     timestamp = serializers.IntegerField(required=False)
24     location = serializers.CharField(required=False)
25     
26     class Meta:
27         model = models.Bookmark
28         fields = ['book', 'anchor', 'note', 'href', 'uuid', 'location', 'timestamp', 'deleted']
29         read_only_fields = ['uuid']
30
31
32
33 @never_cache
34 class BookmarksView(ListCreateAPIView):
35     permission_classes = [IsAuthenticated]
36     serializer_class = BookmarkSerializer
37
38     def get_queryset(self):
39         return self.request.user.bookmark_set.all()
40
41     def perform_create(self, serializer):
42         serializer.save(user=self.request.user)
43
44
45 @never_cache
46 class BookBookmarksView(ListAPIView):
47     permission_classes = [IsAuthenticated]
48     serializer_class = BookmarkSerializer
49     pagination_class = None
50
51     def get_queryset(self):
52         return self.request.user.bookmark_set.filter(book__slug=self.kwargs['book'])
53
54
55 @never_cache
56 class BookmarkView(RetrieveUpdateDestroyAPIView):
57     permission_classes = [IsAuthenticated]
58     serializer_class = BookmarkSerializer
59     lookup_field = 'uuid'
60
61     def get_queryset(self):
62         return self.request.user.bookmark_set.all()