83 lines
2.4 KiB
Python
Executable File
83 lines
2.4 KiB
Python
Executable File
from django.http import HttpResponseRedirect
|
|
from rest_framework.exceptions import PermissionDenied
|
|
from rest_framework.permissions import AllowAny
|
|
|
|
from outbo.apps.core.viewsets import (
|
|
AutoPermissionViewSetMixin,
|
|
RetrieveModelMixin,
|
|
MultipleSerializerViewSet,
|
|
PartialUpdateModelMixin,
|
|
NestedViewSetMixin,
|
|
CreateModelMixin,
|
|
ListModelMixin,
|
|
DestroyModelMixin,
|
|
)
|
|
from outbo.apps.photobriefing import rules
|
|
from outbo.apps.photobriefing.models import Brief, BriefItem, Category, BriefItemPhoto
|
|
from outbo.apps.photobriefing.serializers import (
|
|
BriefSerializer,
|
|
BriefItemSerializer,
|
|
CategorySerializer,
|
|
BriefItemPhotoSerializer,
|
|
)
|
|
|
|
|
|
class BriefViewSet(
|
|
AutoPermissionViewSetMixin,
|
|
PartialUpdateModelMixin,
|
|
RetrieveModelMixin,
|
|
MultipleSerializerViewSet,
|
|
):
|
|
queryset = Brief.objects.all()
|
|
serializer_class_set = BriefSerializer
|
|
|
|
|
|
class BriefItemViewSet(
|
|
AutoPermissionViewSetMixin, DestroyModelMixin, MultipleSerializerViewSet,
|
|
):
|
|
queryset = BriefItem.objects.all()
|
|
serializer_class_set = BriefItemSerializer
|
|
|
|
|
|
class BriefItemNestedViewSet(
|
|
NestedViewSetMixin,
|
|
AutoPermissionViewSetMixin,
|
|
CreateModelMixin,
|
|
MultipleSerializerViewSet,
|
|
):
|
|
queryset = BriefItem.objects.all()
|
|
serializer_class_set = BriefItemSerializer
|
|
|
|
def perform_create(self, *, serializer):
|
|
current_user = self.request.user
|
|
parents = self.get_parents_query_dict()
|
|
brief = Brief.objects.get(pk=parents["brief_id"])
|
|
if not rules.can_edit_brief.test(current_user, brief):
|
|
raise PermissionDenied() # NOTE: Should it be here?
|
|
|
|
return serializer.save(brief=brief)
|
|
|
|
|
|
class BriefItemPhotoViewSet(
|
|
AutoPermissionViewSetMixin, RetrieveModelMixin, MultipleSerializerViewSet,
|
|
):
|
|
queryset = BriefItemPhoto.objects.all()
|
|
serializer_class_set = BriefItemPhotoSerializer
|
|
retrieve_permission_classes = [AllowAny]
|
|
|
|
def get_permissions(self):
|
|
if self.action == "retrieve":
|
|
return [permission() for permission in self.retrieve_permission_classes]
|
|
return super().get_permissions()
|
|
|
|
def retrieve(self, request, *args, **kwargs):
|
|
photo: BriefItemPhoto = self.get_object()
|
|
return HttpResponseRedirect(redirect_to=photo.file.url)
|
|
|
|
|
|
class CategoryViewSet(
|
|
AutoPermissionViewSetMixin, ListModelMixin, MultipleSerializerViewSet,
|
|
):
|
|
queryset = Category.objects.all()
|
|
serializer_class_set = CategorySerializer
|