fnp
/
wolnelektury.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Allow publishing collections.
[wolnelektury.git]
/
src
/
catalogue
/
api
/
views.py
diff --git
a/src/catalogue/api/views.py
b/src/catalogue/api/views.py
index
8b0dc1a
..
1af1577
100644
(file)
--- a/
src/catalogue/api/views.py
+++ b/
src/catalogue/api/views.py
@@
-7,7
+7,8
@@
from django.conf import settings
from django.http import Http404, HttpResponse
from django.utils.decorators import method_decorator
from django.views.decorators.cache import never_cache
from django.http import Http404, HttpResponse
from django.utils.decorators import method_decorator
from django.views.decorators.cache import never_cache
-from rest_framework.generics import ListAPIView, RetrieveAPIView, get_object_or_404
+from rest_framework.generics import (ListAPIView, RetrieveAPIView,
+ RetrieveUpdateAPIView, get_object_or_404)
from rest_framework.permissions import DjangoModelPermissionsOrAnonReadOnly
from rest_framework.response import Response
from rest_framework import status
from rest_framework.permissions import DjangoModelPermissionsOrAnonReadOnly
from rest_framework.response import Response
from rest_framework import status
@@
-26,13
+27,31
@@
from . import serializers
book_tag_categories = ['author', 'epoch', 'kind', 'genre']
book_tag_categories = ['author', 'epoch', 'kind', 'genre']
+class CreateOnPutMixin:
+ '''
+ Creates a new model instance when PUTting a nonexistent resource.
+ '''
+ def get_object(self):
+ try:
+ return super().get_object()
+ except Http404:
+ if self.request.method == 'PUT':
+ lookup_url_kwarg = self.lookup_url_kwarg or self.lookup_field
+ return self.get_queryset().model(**{
+ self.lookup_field: self.kwargs[lookup_url_kwarg]
+ })
+ else:
+ raise
+
+
class CollectionList(ListAPIView):
class CollectionList(ListAPIView):
- queryset = Collection.objects.
all(
)
+ queryset = Collection.objects.
filter(listed=True
)
serializer_class = serializers.CollectionListSerializer
@vary_on_auth # Because of 'liked'.
serializer_class = serializers.CollectionListSerializer
@vary_on_auth # Because of 'liked'.
-class CollectionDetail(RetrieveAPIView):
+class CollectionDetail(CreateOnPutMixin, RetrieveUpdateAPIView):
+ permission_classes = [DjangoModelPermissionsOrAnonReadOnly]
queryset = Collection.objects.all()
lookup_field = 'slug'
serializer_class = serializers.CollectionSerializer
queryset = Collection.objects.all()
lookup_field = 'slug'
serializer_class = serializers.CollectionSerializer
@@
-135,6
+154,9
@@
class BookList(ListAPIView):
name = request.POST.get('name', '')
part_name = request.POST.get('part_name', '')
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)
_rest, slug = request.POST['book'].rstrip('/').rsplit('/', 1)
book = Book.objects.get(slug=slug)
@@
-146,6
+168,8
@@
class BookList(ListAPIView):
bm.name = name
bm.part_name = part_name
bm.index = index
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)
bm.file.save(None, request.data['file'], save=False)
bm.save(parts_count=parts_count)
@@
-284,8
+308,10
@@
class TagCategoryView(ListAPIView):
class TagView(RetrieveAPIView):
class TagView(RetrieveAPIView):
+ permission_classes = [DjangoModelPermissionsOrAnonReadOnly]
serializer_class = serializers.TagDetailSerializer
serializer_class = serializers.TagDetailSerializer
-
+ queryset = Tag.objects.all()
+
def get_object(self):
return get_object_or_404(
Tag,
def get_object(self):
return get_object_or_404(
Tag,
@@
-293,6
+319,14
@@
class TagView(RetrieveAPIView):
slug=self.kwargs['slug']
)
slug=self.kwargs['slug']
)
+ def post(self, request, **kwargs):
+ data = json.loads(request.POST.get('data'))
+ desc = data['description_pl']
+ obj = self.get_object()
+ obj.description_pl = desc
+ obj.save(update_fields=['description_pl'], quick=True)
+ return Response({})
+
@vary_on_auth # Because of 'liked'.
class FragmentList(ListAPIView):
@vary_on_auth # Because of 'liked'.
class FragmentList(ListAPIView):