Initial commit from ZIP

This commit is contained in:
kusz committed 2024-11-27 13:18:16 +01:00
commit 378d4692a9
454 files changed
+40367

No files matched your search

+99
View File
@@ -0,0 +1,99 @@
from django.http import HttpResponseRedirect
from rest_framework import serializers
from rest_framework.permissions import AllowAny
from outbo.apps.core.viewsets import (
AutoPermissionViewSetMixin,
RetrieveModelMixin,
MultipleSerializerViewSet,
PartialUpdateModelMixin,
DestroyModelMixin,
)
from outbo.apps.final_photobriefing.enums import PhotoType
from outbo.apps.final_photobriefing.models import FinalBrief, FinalBriefPhoto
class FinalBriefPhotoSerializer:
class List(serializers.ModelSerializer):
url = serializers.HyperlinkedIdentityField(
view_name="final_photobriefing:finalbriefphoto-detail"
)
type = serializers.SerializerMethodField()
filename = serializers.ReadOnlyField()
class Meta:
model = FinalBriefPhoto
fields = ["url", "type", "filename"]
def get_type(self, instance):
t, val = instance.type.split(".", 1)
return PhotoType[val].value
class Create(serializers.ModelSerializer):
type = serializers.CharField()
class Meta:
model = FinalBriefPhoto
fields = ["type", "file"]
def validate_type(self, value):
try:
return PhotoType(value)
except ValueError:
raise serializers.ValidationError("Invalid photo type value")
class BaseFinalBriefSerializer(serializers.ModelSerializer):
class Meta:
model = FinalBrief
class FinalBriefSerializer:
class Retrieve(BaseFinalBriefSerializer):
photos = FinalBriefPhotoSerializer.List(many=True)
class Meta(BaseFinalBriefSerializer.Meta):
fields = ["photos", "created_at", "updated_at"]
class Update(BaseFinalBriefSerializer):
photos = FinalBriefPhotoSerializer.Create(many=True)
class Meta(BaseFinalBriefSerializer.Meta):
fields = ["photos"]
def update(self, instance, validated_data):
photos = validated_data.pop("photos", None)
if photos is not None:
for photo in photos:
FinalBriefPhoto.objects.create(brief=instance, **photo)
return instance
class FinalBriefViewSet(
AutoPermissionViewSetMixin,
RetrieveModelMixin,
PartialUpdateModelMixin,
MultipleSerializerViewSet,
):
queryset = FinalBrief.objects.all()
serializer_class_set = FinalBriefSerializer
class FinalBriefPhotoViewSet(
AutoPermissionViewSetMixin,
RetrieveModelMixin,
DestroyModelMixin,
MultipleSerializerViewSet,
):
queryset = FinalBriefPhoto.objects.all()
serializer_class_set = FinalBriefPhotoSerializer
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 = self.get_object()
return HttpResponseRedirect(redirect_to=photo.file.url)