Files
outbo-2-stgclone/evg-outbo-api/outbo/apps/photobriefing/viewsets.py
T
2024-11-27 13:18:16 +01:00

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