class TasksListAPI(generics.ListCreateAPIView, generics.DestroyAPIView, APIViewVirtualMethodMixin, APIViewVirtualRedirectMixin): """ get: List project tasks Paginated list of tasks for a specific project. delete: Delete all tasks Delete all tasks from a specific project. """ parser_classes = (JSONParser, FormParser) permission_required = ViewClassPermission( GET=all_permissions.tasks_view, POST=all_permissions.tasks_change, DELETE=all_permissions.tasks_delete, ) serializer_class = TaskSerializer redirect_route = 'projects:project-settings' redirect_kwarg = 'pk' def get_queryset(self): project = generics.get_object_or_404(Project.objects.for_user( self.request.user), pk=self.kwargs.get('pk', 0)) tasks = Task.objects.filter(project=project) return paginator(tasks, self.request) @swagger_auto_schema(tags=['Projects']) def delete(self, request, *args, **kwargs): project = generics.get_object_or_404(Project.objects.for_user( self.request.user), pk=self.kwargs['pk']) Task.objects.filter(project=project).delete() return Response(status=204) @swagger_auto_schema(**paginator_help('tasks', 'Projects')) def get(self, *args, **kwargs): return super(TasksListAPI, self).get(*args, **kwargs) @swagger_auto_schema(auto_schema=None, tags=['Projects']) def post(self, *args, **kwargs): return super(TasksListAPI, self).post(*args, **kwargs) def get_serializer_context(self): context = super(TasksListAPI, self).get_serializer_context() context['project'] = get_object_with_check_and_log( self.request, Project, pk=self.kwargs['pk']) return context def perform_create(self, serializer): project = get_object_with_check_and_log(self.request, Project, pk=self.kwargs['pk']) serializer.save(project=project)
class ProjectTaskListAPI(generics.ListCreateAPIView, generics.DestroyAPIView): parser_classes = (JSONParser, FormParser) queryset = Task.objects.all() permission_required = ViewClassPermission( GET=all_permissions.tasks_view, POST=all_permissions.tasks_change, DELETE=all_permissions.tasks_delete, ) serializer_class = TaskSerializer redirect_route = 'projects:project-settings' redirect_kwarg = 'pk' def get_serializer_class(self): if self.request.method == 'GET': return TaskSimpleSerializer else: return TaskSerializer def filter_queryset(self, queryset): project = generics.get_object_or_404(Project.objects.for_user( self.request.user), pk=self.kwargs.get('pk', 0)) tasks = Task.objects.filter(project=project) page = paginator(tasks, self.request) if page: return page else: raise Http404 def delete(self, request, *args, **kwargs): project = generics.get_object_or_404(Project.objects.for_user( self.request.user), pk=self.kwargs['pk']) task_ids = list(Task.objects.filter(project=project).values('id')) Task.objects.filter(project=project).delete() emit_webhooks_for_instance(request.user.active_organization, None, WebhookAction.TASKS_DELETED, task_ids) return Response(data={'tasks': task_ids}, status=204) @swagger_auto_schema(**paginator_help('tasks', 'Projects')) def get(self, *args, **kwargs): return super(ProjectTaskListAPI, self).get(*args, **kwargs) @swagger_auto_schema(auto_schema=None) def post(self, *args, **kwargs): return super(ProjectTaskListAPI, self).post(*args, **kwargs) def get_serializer_context(self): context = super(ProjectTaskListAPI, self).get_serializer_context() context['project'] = get_object_with_check_and_log( self.request, Project, pk=self.kwargs['pk']) return context def perform_create(self, serializer): project = get_object_with_check_and_log(self.request, Project, pk=self.kwargs['pk']) instance = serializer.save(project=project) emit_webhooks_for_instance(self.request.user.active_organization, project, WebhookAction.TASKS_CREATED, [instance])
queryset = ProjectSummary.objects.all() @swagger_auto_schema(auto_schema=None) def get(self, *args, **kwargs): return super(ProjectSummaryAPI, self).get(*args, **kwargs) @method_decorator( name='delete', decorator=swagger_auto_schema( tags=['Projects'], operation_summary='Delete all tasks', operation_description='Delete all tasks from a specific project.')) @method_decorator( name='get', decorator=swagger_auto_schema(**paginator_help('tasks', 'Projects'), operation_summary='List project tasks', operation_description=""" Retrieve a paginated list of tasks for a specific project. For example, use the following cURL command: ```bash curl -X GET {}/api/projects/{{id}}/tasks/ -H 'Authorization: Token abc123' ``` """.format(settings.HOSTNAME or 'https://localhost:8080'))) class TasksListAPI(generics.ListCreateAPIView, generics.DestroyAPIView, APIViewVirtualMethodMixin, APIViewVirtualRedirectMixin): parser_classes = (JSONParser, FormParser) queryset = Task.objects.all() permission_required = ViewClassPermission( GET=all_permissions.tasks_view, POST=all_permissions.tasks_change,
serializer_class = ProjectSummarySerializer permission_required = all_permissions.projects_view queryset = ProjectSummary.objects.all() @swagger_auto_schema(tags=['Projects'], operation_summary='Project summary') def get(self, *args, **kwargs): return super(ProjectSummaryAPI, self).get(*args, **kwargs) @method_decorator(name='delete', decorator=swagger_auto_schema( tags=['Projects'], operation_summary='Delete all tasks', operation_description='Delete all tasks from a specific project.' )) @method_decorator(name='get', decorator=swagger_auto_schema( **paginator_help('tasks', 'Projects'), operation_summary='List project tasks', operation_description=""" Retrieve a paginated list of tasks for a specific project. For example, use the following cURL command: ```bash curl -X GET {}/api/projects/{{id}}/tasks/ -H 'Authorization: Token abc123' ``` """.format(settings.HOSTNAME or 'https://localhost:8080') )) class TasksListAPI(generics.ListCreateAPIView, generics.DestroyAPIView, APIViewVirtualMethodMixin, APIViewVirtualRedirectMixin): parser_classes = (JSONParser, FormParser) permission_required = ViewClassPermission(