def delete(self, request, project): """ Bulk Remove a List of Issues ```````````````````````````` Permanently remove the given issues. The list of issues to modify is given through the `id` query parameter. It is repeated for each issue that should be removed. Only queries by 'id' are accepted. If any ids are out of scope this operation will succeed without any data mutation. :qparam int id: a list of IDs of the issues to be removed. This parameter shall be repeated for each issue. :pparam string organization_slug: the slug of the organization the issues belong to. :pparam string project_slug: the slug of the project the issues belong to. :auth: required """ group_ids = request.GET.getlist('id') if group_ids: group_list = list( Group.objects.filter( project=project, id__in=set(group_ids), ).exclude( status__in=[ GroupStatus.PENDING_DELETION, GroupStatus.DELETION_IN_PROGRESS, ] ) ) else: try: # bulk mutations are limited to 1000 items # TODO(dcramer): it'd be nice to support more than this, but its # a bit too complicated right now cursor_result, _ = self._search(request, project, { 'limit': 1000, 'paginator_options': {'max_limit': 1000}, }) except ValidationError as exc: return Response({'detail': six.text_type(exc)}, status=400) group_list = list(cursor_result) if not group_list: return Response(status=204) delete_groups(request, project, group_list, delete_type='delete') return Response(status=204)
def delete(self, request, organization): """ Bulk Remove a List of Issues ```````````````````````````` Permanently remove the given issues. The list of issues to modify is given through the `id` query parameter. It is repeated for each issue that should be removed. Only queries by 'id' are accepted. If any ids are out of scope this operation will succeed without any data mutation. :qparam int id: a list of IDs of the issues to be removed. This parameter shall be repeated for each issue. :pparam string organization_slug: the slug of the organization the issues belong to. :auth: required """ projects = self.get_projects(request, organization) search_fn = functools.partial( self._search, request, organization, projects, self.get_environments(request, organization), ) return delete_groups( request, projects, organization.id, search_fn, )
def delete(self, request, project): """ Bulk Remove a List of Issues ```````````````````````````` Permanently remove the given issues. The list of issues to modify is given through the `id` query parameter. It is repeated for each issue that should be removed. Only queries by 'id' are accepted. If any ids are out of scope this operation will succeed without any data mutation. :qparam int id: a list of IDs of the issues to be removed. This parameter shall be repeated for each issue. :pparam string organization_slug: the slug of the organization the issues belong to. :pparam string project_slug: the slug of the project the issues belong to. :auth: required """ search_fn = functools.partial(self._search, request, project) return delete_groups( request, [project], project.organization_id, search_fn, )
def delete(self, request: Request, project) -> Response: """ Bulk Remove a List of Issues ```````````````````````````` Permanently remove the given issues. The list of issues to modify is given through the `id` query parameter. It is repeated for each issue that should be removed. Only queries by 'id' are accepted. If any ids are out of scope this operation will succeed without any data mutation. :qparam int id: a list of IDs of the issues to be removed. This parameter shall be repeated for each issue. :pparam string organization_slug: the slug of the organization the issues belong to. :pparam string project_slug: the slug of the project the issues belong to. :auth: required """ search_fn = functools.partial(prep_search, self, request, project) return delete_groups(request, [project], project.organization_id, search_fn)
def delete(self, request, organization): """ Bulk Remove a List of Issues ```````````````````````````` Permanently remove the given issues. The list of issues to modify is given through the `id` query parameter. It is repeated for each issue that should be removed. Only queries by 'id' are accepted. If any ids are out of scope this operation will succeed without any data mutation. :qparam int id: a list of IDs of the issues to be removed. This parameter shall be repeated for each issue. :pparam string organization_slug: the slug of the organization the issues belong to. :auth: required """ projects = self.get_projects(request, organization) if len(projects) > 1 and not features.has('organizations:global-views', organization, actor=request.user): return Response( { 'detail': 'You do not have the multi project stream feature enabled' }, status=400) search_fn = functools.partial( self._search, request, organization, projects, self.get_environments(request, organization), ) return delete_groups( request, projects, organization.id, search_fn, )
def delete(self, request, organization): """ Bulk Remove a List of Issues ```````````````````````````` Permanently remove the given issues. The list of issues to modify is given through the `id` query parameter. It is repeated for each issue that should be removed. Only queries by 'id' are accepted. If any ids are out of scope this operation will succeed without any data mutation. :qparam int id: a list of IDs of the issues to be removed. This parameter shall be repeated for each issue. :pparam string organization_slug: the slug of the organization the issues belong to. :auth: required """ projects = self.get_projects(request, organization) if len(projects) > 1 and not features.has( 'organizations:global-views', organization, actor=request.user): return Response({ 'detail': 'You do not have the multi project stream feature enabled' }, status=400) search_fn = functools.partial( self._search, request, organization, projects, self.get_environments(request, organization), ) return delete_groups( request, projects, organization.id, search_fn, )