def delete(self, request, team): """ Delete a team Schedules a team for deletion. {method} {path} **Note:** Deletion happens asynchronously and therefor is not immediate. However once deletion has begun the state of a project changes and will be hidden from most public views. """ updated = Team.objects.filter( id=team.id, status=TeamStatus.VISIBLE, ).update(status=TeamStatus.PENDING_DELETION) if updated: delete_team.delay(object_id=team.id, countdown=60 * 5) self.create_audit_entry( request=request, organization=team.organization, target_object=team.id, event=AuditLogEntryEvent.TEAM_REMOVE, data=team.get_audit_log_data(), ) return Response(status=204)
def handle(self, request, organization, team): if not can_remove_team(request.user, team): return HttpResponseRedirect(reverse('sentry')) form = self.get_form(request) if form.is_valid(): if team.status != TeamStatus.PENDING_DELETION: team.update(status=TeamStatus.PENDING_DELETION) delete_team.delay(object_id=team.id, countdown=60 * 5) AuditLogEntry.objects.create( organization=organization, actor=request.user, ip_address=request.META['REMOTE_ADDR'], target_object=team.id, event=AuditLogEntryEvent.TEAM_REMOVE, data=team.get_audit_log_data(), ) messages.add_message( request, messages.SUCCESS, _(u'The team %r was scheduled for deletion.') % (team.name.encode('utf-8'), )) return HttpResponseRedirect(reverse('sentry')) context = { 'form': form, } return self.respond('sentry/teams/remove.html', context)
def delete(self, request, team): """ Delete a Team ````````````` Schedules a team for deletion. **Note:** Deletion happens asynchronously and therefor is not immediate. However once deletion has begun the state of a project changes and will be hidden from most public views. """ logging.getLogger('sentry.deletions').info( 'Team %s/%s (id=%s) removal requested by user (id=%s)', team.organization.slug, team.slug, team.id, request.user.id) updated = Team.objects.filter( id=team.id, status=TeamStatus.VISIBLE, ).update(status=TeamStatus.PENDING_DELETION) if updated: delete_team.delay(object_id=team.id, countdown=3600) self.create_audit_entry( request=request, organization=team.organization, target_object=team.id, event=AuditLogEntryEvent.TEAM_REMOVE, data=team.get_audit_log_data(), ) return Response(status=204)
def handle(self, request, organization, team): form = self.get_form(request) if form.is_valid(): if team.status == TeamStatus.VISIBLE: team.update(status=TeamStatus.PENDING_DELETION) delete_team.delay(object_id=team.id, countdown=60 * 5) AuditLogEntry.objects.create( organization=organization, actor=request.user, ip_address=request.META['REMOTE_ADDR'], target_object=team.id, event=AuditLogEntryEvent.TEAM_REMOVE, data=team.get_audit_log_data(), ) messages.add_message( request, messages.SUCCESS, _(u'The team %r was scheduled for deletion.') % (team.name.encode('utf-8'),)) return HttpResponseRedirect(reverse('sentry')) context = { 'form': form, } return self.respond('sentry/teams/remove.html', context)
def delete(self, request, team_id): team = Team.objects.get(id=team_id) assert_perm(team, request.user, request.auth, access=OrganizationMemberType.ADMIN) if team.status == TeamStatus.VISIBLE: team.update(status=TeamStatus.PENDING_DELETION) delete_team.delay(object_id=team.id, countdown=60 * 5) AuditLogEntry.objects.create( organization=team.organization, actor=request.user, ip_address=request.META['REMOTE_ADDR'], target_object=team.id, event=AuditLogEntryEvent.TEAM_REMOVE, data=team.get_audit_log_data(), ) return Response(status=204)
def delete(self, request, team_id): team = Team.objects.get(id=team_id) assert_perm(team, request.user, request.auth, access=MEMBER_ADMIN) if team.project_set.filter(id=settings.SENTRY_PROJECT).exists(): return Response('{"error": "Cannot remove team containing default project."}', status=status.HTTP_403_FORBIDDEN) if not (request.user.is_superuser or team.owner_id == request.user.id): return Response('{"error": "You do not have permission to remove this team."}', status=status.HTTP_403_FORBIDDEN) team.update(status=TeamStatus.PENDING_DELETION) # TODO(dcramer): set status to pending deletion # we delay the task for 5 minutes so we can implement an undo delete_team.delay(object_id=team.id, countdown=60 * 5) return Response(status=204)