From a0197f834c6097bb591a9e01237c6b33ed6265f2 Mon Sep 17 00:00:00 2001 From: Ernesto Rico Schmidt <ernesto@helsinki.at> Date: Thu, 12 Sep 2024 17:18:12 -0400 Subject: [PATCH] =?UTF-8?q?fix:=20PATCH=20requests=20for=20schedules=20don?= =?UTF-8?q?=E2=80=99t=20have=20the=20schedule=20JSON=20object?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- program/views.py | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/program/views.py b/program/views.py index ebc1038d..d6ac5b62 100644 --- a/program/views.py +++ b/program/views.py @@ -1186,22 +1186,17 @@ class APIScheduleViewSet(viewsets.ModelViewSet): return Response(resolution, status=status.HTTP_201_CREATED) - def validate_update_request(self): - """Validate that the request has the change_schedule permission and includes `schedule`.""" - - if not self.request.user.has_perm("program.change_schedule"): - return Response(status=status.HTTP_401_UNAUTHORIZED) - - if "schedule" not in self.request.data: - return Response(status=status.HTTP_400_BAD_REQUEST) - def update(self, request, *args, **kwargs): """ Update a schedule, generate timeslots, test for collisions and resolve them including notes. """ - self.validate_update_request() + if not self.request.user.has_perm("program.change_schedule"): + return Response(status=status.HTTP_401_UNAUTHORIZED) + + if "schedule" not in self.request.data: + return Response(status=status.HTTP_400_BAD_REQUEST) schedule = self.get_object() @@ -1217,20 +1212,21 @@ class APIScheduleViewSet(viewsets.ModelViewSet): Partial update a schedule without generating timeslots, testing or resolving collisions. """ - self.validate_update_request() + if not self.request.user.has_perm("program.change_schedule"): + return Response(status=status.HTTP_401_UNAUTHORIZED) # only these fields can be updated without generating conflicts allowed = {"default_playlist_id", "is_repetition", "last_date"} - update_fields = set(request.data.get("schedule").keys()) + update_fields = set(request.data.keys()) if update_fields.issubset(allowed): schedule = self.get_object() - request_schedule = self.request.data.get("schedule") + request_data = self.request.data - if "default_playlist_id" in request_schedule: - default_playlist_id = request_schedule.get("default_playlist_id") + if "default_playlist_id" in request_data: + default_playlist_id = request_data.get("default_playlist_id") - if default_playlist_id == "": + if default_playlist_id == "" or default_playlist_id is None: schedule.default_playlist_id = None else: try: @@ -1240,11 +1236,14 @@ class APIScheduleViewSet(viewsets.ModelViewSet): return Response(data, status=status.HTTP_400_BAD_REQUEST) - if "is_repetition" in request_schedule: - schedule.is_repetition = bool(request_schedule.get("is_repetition")) + if is_repetition := request_data.get("is_repetition"): + if is_repetition == "true" or is_repetition == "1": + schedule.is_repetition = True + elif is_repetition == "false" or is_repetition == "0": + schedule.is_repetition = False - if "last_date" in request_schedule: - last_date = request_schedule.get("last_date") + if "last_date" in request_data: + last_date = request_data.get("last_date") if last_date == "": schedule.last_date = None -- GitLab