| 423 | |
| 424 | |
| 425 | def update(self, request, pk=None, project_pk=None, partial=False): |
| 426 | try: |
| 427 | task = self.queryset.get(pk=pk, project=project_pk) |
| 428 | check_project_perms(request, task.project, ('change_project', )) |
| 429 | except (ObjectDoesNotExist, ValidationError): |
| 430 | raise exceptions.NotFound() |
| 431 | |
| 432 | # Check if user has permissions to set processing node |
| 433 | check_processing_node_perms(request) |
| 434 | |
| 435 | # Check that a user has access to reassign a project |
| 436 | if 'project' in request.data: |
| 437 | try: |
| 438 | get_and_check_project(request, request.data['project'], ('change_project', ), defer=True) |
| 439 | except exceptions.NotFound: |
| 440 | raise exceptions.PermissionDenied() |
| 441 | |
| 442 | serializer = TaskSerializer(task, data=request.data, partial=partial) |
| 443 | serializer.is_valid(raise_exception=True) |
| 444 | serializer.save() |
| 445 | |
| 446 | # Process task right away |
| 447 | worker_tasks.process_task.delay(task.id) |
| 448 | |
| 449 | return Response(serializer.data) |
| 450 | |
| 451 | def partial_update(self, request, *args, **kwargs): |
| 452 | kwargs['partial'] = True |