Initial commit from ZIP
This commit is contained in:
commit
378d4692a9
454 files changed
+40367
No files matched your search
+82
@@ -0,0 +1,82 @@
|
||||
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
|
||||
Reference in new issue
Block a user