From 1b1b826dcae4bea8b908f884b45c687e3fdb78f9 Mon Sep 17 00:00:00 2001 From: Arpad Borsos Date: Wed, 16 Apr 2025 15:20:00 +0200 Subject: [PATCH 1/2] Make delete confirmation more lightweight This nulls out the `get_deleted_objects`, which is used by the django admin to display a list of objects, and more importantly related objects being deleted. As in particular with big owners/repos, actually building the list of all the related objects is unreasonably slow, so slow in fact that showing the confirmation dialog times out. To not block deletes of deeply nested object hierarchies, this will just return empty lists instead. --- codecov_auth/admin.py | 13 +------------ core/admin.py | 3 +++ 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/codecov_auth/admin.py b/codecov_auth/admin.py index 4699f8185c..9e1a738838 100644 --- a/codecov_auth/admin.py +++ b/codecov_auth/admin.py @@ -645,18 +645,7 @@ def delete_model(self, request, obj) -> None: TaskService().delete_owner(ownerid=obj.ownerid) def get_deleted_objects(self, objs, request): - ( - deleted_objects, - model_count, - perms_needed, - protected, - ) = super().get_deleted_objects(objs, request) - - if request.user and request.user.is_superuser: - perms_needed = set() - - deleted_objects = () - return deleted_objects, model_count, perms_needed, protected + return [], {}, set(), [] def save_related(self, request: HttpRequest, form, formsets, change: bool) -> None: if formsets: diff --git a/core/admin.py b/core/admin.py index 2a1908e826..af7f526732 100644 --- a/core/admin.py +++ b/core/admin.py @@ -104,6 +104,9 @@ def delete_queryset(self, request, queryset) -> None: def delete_model(self, request, obj) -> None: TaskService().flush_repo(repository_id=obj.repoid) + def get_deleted_objects(self, objs, request): + return [], {}, set(), [] + @admin.register(Pull) class PullsAdmin(AdminMixin, admin.ModelAdmin): From 2f0d116925afe9b06bdd60df8f79e843b4f6068f Mon Sep 17 00:00:00 2001 From: Arpad Borsos Date: Thu, 17 Apr 2025 08:41:43 +0200 Subject: [PATCH 2/2] rm outdated test --- codecov_auth/tests/test_admin.py | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/codecov_auth/tests/test_admin.py b/codecov_auth/tests/test_admin.py index 6b36c50027..fa89693bdf 100644 --- a/codecov_auth/tests/test_admin.py +++ b/codecov_auth/tests/test_admin.py @@ -125,26 +125,6 @@ def test_delete_model(self, delete_mock): self.owner_admin.delete_model(MagicMock(), user_to_delete) delete_mock.assert_called_once_with(ownerid=ownerid) - @patch("codecov_auth.admin.admin.ModelAdmin.get_deleted_objects") - def test_confirmation_deleted_objects(self, mocked_deleted_objs): - user_to_delete = OwnerFactory(plan=DEFAULT_FREE_PLAN) - deleted_objs = [ - 'Owner: {};'.format( - user_to_delete.ownerid, user_to_delete - ) - ] - mocked_deleted_objs.return_value = deleted_objs, {"owners": 1}, set(), [] - - ( - deleted_objects, - model_count, - perms_needed, - protected, - ) = self.owner_admin.get_deleted_objects([user_to_delete], MagicMock()) - - mocked_deleted_objs.assert_called_once() - assert deleted_objects == () - @patch("codecov_auth.admin.admin.ModelAdmin.log_change") def test_prev_and_new_values_in_log_entry(self, mocked_super_log_change): owner = OwnerFactory(staff=True, plan=DEFAULT_FREE_PLAN)