From 86923c974692dc3d9d74bc8dba383daf27903272 Mon Sep 17 00:00:00 2001 From: Piero Toffanin Date: Fri, 21 Oct 2016 11:02:41 -0400 Subject: [PATCH] Added PATCH operation on task API --- app/api/tasks.py | 18 +++++++++++++++++- app/tests/test_api.py | 5 ++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/app/api/tasks.py b/app/api/tasks.py index 9815e036..1a936af1 100644 --- a/app/api/tasks.py +++ b/app/api/tasks.py @@ -28,7 +28,7 @@ class TaskViewSet(viewsets.ViewSet): # We don't use object level permissions on tasks, relying on # project's object permissions instead (but standard model permissions still apply) permission_classes = (permissions.DjangoModelPermissions, ) - parser_classes = (parsers.MultiPartParser, ) + parser_classes = (parsers.MultiPartParser, parsers.JSONParser, ) def get_and_check_project(self, request, project_pk, perms = ('view_project', )): ''' @@ -72,3 +72,19 @@ class TaskViewSet(viewsets.ViewSet): return Response({"id": task.id}, status=status.HTTP_201_CREATED) else: raise exceptions.ValidationError(detail="Cannot create task, input provided is not valid.") + + def update(self, request, pk=None, project_pk=None, partial=False): + project = self.get_and_check_project(request, project_pk, ('change_project', )) + try: + task = self.queryset.get(pk=pk, project=project_pk) + except ObjectDoesNotExist: + raise exceptions.NotFound() + + serializer = TaskSerializer(task, data=request.data, partial=partial) + serializer.is_valid(raise_exception=True) + serializer.save() + return Response(serializer.data) + + def partial_update(self, request, *args, **kwargs): + kwargs['partial'] = True + return self.update(request, *args, **kwargs) \ No newline at end of file diff --git a/app/tests/test_api.py b/app/tests/test_api.py index b7a86394..9df90ce3 100644 --- a/app/tests/test_api.py +++ b/app/tests/test_api.py @@ -152,4 +152,7 @@ class TestApi(BootTestCase): res = client.get('/api/processingnodes/') self.assertEqual(res.status_code, status.HTTP_200_OK) self.assertTrue(len(res.data) == 1) - self.assertTrue(res.data[0]["port"] == 1000) \ No newline at end of file + self.assertTrue(res.data[0]["port"] == 1000) + + # TODO: test PATCH operation on tasks + \ No newline at end of file