def delete(self, request, organization, repo_id): if not request.user.is_authenticated(): return Response(status=401) try: repo = Repository.objects.get( id=repo_id, organization_id=organization.id, ) except Repository.DoesNotExist: raise ResourceDoesNotExist updated = Repository.objects.filter( id=repo.id, status__in=[ObjectStatus.VISIBLE, ObjectStatus.DISABLED], ).update(status=ObjectStatus.PENDING_DELETION) if updated: repo.status = ObjectStatus.PENDING_DELETION transaction_id = get_transaction_id() # if repo doesn't have commits, delete immediately has_commits = Commit.objects.filter( repository_id=repo.id, organization_id=organization.id, ).exists() countdown = 3600 if has_commits else 0 repo.rename_on_pending_deletion() delete_repository.apply_async( kwargs={ 'object_id': repo.id, 'transaction_id': transaction_id, 'actor_id': request.user.id, }, countdown=countdown, ) delete_logger.info( 'object.delete.queued', extra={ 'object_id': repo.id, 'transaction_id': transaction_id, 'model': Repository.__name__, } ) return Response(serialize(repo, request.user), status=202)
def delete(self, request, organization, repo_id): if not request.user.is_authenticated(): return Response(status=401) try: repo = Repository.objects.get( id=repo_id, organization_id=organization.id, ) except Repository.DoesNotExist: raise ResourceDoesNotExist updated = Repository.objects.filter( id=repo.id, status=ObjectStatus.VISIBLE, ).update(status=ObjectStatus.PENDING_DELETION) if updated: repo.status = ObjectStatus.PENDING_DELETION transaction_id = uuid4().hex countdown = 86400 delete_repository.apply_async( kwargs={ 'object_id': repo.id, 'transaction_id': transaction_id, 'actor_id': request.user.id, }, countdown=countdown, ) delete_logger.info('object.delete.queued', extra={ 'object_id': repo.id, 'transaction_id': transaction_id, 'model': Repository.__name__, }) return Response(serialize(repo, request.user), status=202)