From eadaa66a3d37b1f5ef259ddebabdda9d4d112f12 Mon Sep 17 00:00:00 2001
From: Ernesto Rico Schmidt <ernesto@helsinki.at>
Date: Mon, 12 Feb 2024 14:10:25 -0400
Subject: [PATCH] feat: raise an exceptions on validation errors

---
 program/views.py | 32 ++++++++------------------------
 1 file changed, 8 insertions(+), 24 deletions(-)

diff --git a/program/views.py b/program/views.py
index 23f96a8a..ffb7119a 100644
--- a/program/views.py
+++ b/program/views.py
@@ -282,12 +282,10 @@ class APIUserViewSet(
             data=request.data,
         )
 
-        if serializer.is_valid():
+        if serializer.is_valid(raise_exception=True):
             serializer.save()
             return Response(serializer.data, status=status.HTTP_201_CREATED)
 
-        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
-
 
 @extend_schema_view(
     create=extend_schema(summary="Create a new image."),
@@ -320,12 +318,10 @@ class APIImageViewSet(viewsets.ModelViewSet):
             data=request.data,
         )
 
-        if serializer.is_valid():
+        if serializer.is_valid(raise_exception=True):
             serializer.save()
             return Response(serializer.data, status=status.HTTP_201_CREATED)
 
-        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
-
     def update(self, request, *args, **kwargs):
         """Update an Image instance. Only the creator can update an image."""
 
@@ -336,12 +332,10 @@ class APIImageViewSet(viewsets.ModelViewSet):
             data=request.data,
         )
 
-        if serializer.is_valid():
+        if serializer.is_valid(raise_exception=True):
             serializer.save()
             return Response(serializer.data)
 
-        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
-
     def destroy(self, request, *args, **kwargs):
         """Destroy an Image instance. Only the owner can delete an image."""
 
@@ -388,12 +382,10 @@ class APIShowViewSet(DisabledObjectPermissionCheckMixin, viewsets.ModelViewSet):
             data=request.data,
         )
 
-        if serializer.is_valid():
+        if serializer.is_valid(raise_exception=True):
             serializer.save()
             return Response(serializer.data, status=status.HTTP_201_CREATED)
 
-        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
-
     def update(self, request, *args, **kwargs):
         partial = kwargs.get("partial", False)
         show = self.get_object()
@@ -405,12 +397,10 @@ class APIShowViewSet(DisabledObjectPermissionCheckMixin, viewsets.ModelViewSet):
             partial=partial,
         )
 
-        if serializer.is_valid():
+        if serializer.is_valid(raise_exception=True):
             serializer.save()
             return Response(serializer.data)
 
-        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
-
     def partial_update(self, request, *args, **kwargs):
         kwargs["partial"] = True
         return self.update(request, *args, **kwargs)
@@ -660,7 +650,7 @@ class APITimeSlotViewSet(
         show_pk = get_values(self.kwargs, "show_pk")
         timeslot = self.get_object()
         serializer = TimeSlotSerializer(timeslot, data=request.data)
-        if serializer.is_valid():
+        if serializer.is_valid(raise_exception=True):
             serializer.save()
 
             # Return the next repetition
@@ -675,8 +665,6 @@ class APITimeSlotViewSet(
             # ...or nothing if there isn't one
             return Response(serializer.data, status=status.HTTP_200_OK)
 
-        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
-
 
 @extend_schema_view(
     create=extend_schema(summary="Create a new note."),
@@ -848,11 +836,9 @@ class APIHostViewSet(ActiveFilterMixin, viewsets.ModelViewSet):
             context={"request": request},  # the serializer needs the request in the context
             data=request.data,
         )
-        if serializer.is_valid():
+        if serializer.is_valid(raise_exception=True):
             serializer.save()
             return Response(serializer.data, status=status.HTTP_201_CREATED)
-        else:
-            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
 
     def update(self, request, *args, **kwargs):
         partial = kwargs.get("partial", False)
@@ -866,11 +852,9 @@ class APIHostViewSet(ActiveFilterMixin, viewsets.ModelViewSet):
             partial=partial,
         )
 
-        if serializer.is_valid():
+        if serializer.is_valid(raise_exception=True):
             serializer.save()
             return Response(serializer.data, status=status.HTTP_200_OK)
-        else:
-            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
 
     def partial_update(self, request, *args, **kwargs):
         kwargs["partial"] = True
-- 
GitLab