From 59255c0b7624fd33138409cb09ccb7b1828ef0de Mon Sep 17 00:00:00 2001 From: Chandrapal Badshah <12944530+Chan9390@users.noreply.github.com> Date: Mon, 20 Oct 2025 20:14:20 +0530 Subject: [PATCH] fix: move lighthouse provider delete cleanup to pre_delete signal --- api/src/backend/api/models.py | 26 ----------------------- api/src/backend/api/signals.py | 39 +++++++++++++++++++++++++++++++++- 2 files changed, 38 insertions(+), 27 deletions(-) diff --git a/api/src/backend/api/models.py b/api/src/backend/api/models.py index 17133b83c8..c2c0dbcb47 100644 --- a/api/src/backend/api/models.py +++ b/api/src/backend/api/models.py @@ -2026,32 +2026,6 @@ class LighthouseProviderConfiguration(RowLevelSecurityProtectedModel): ) self.credentials = fernet.encrypt(json.dumps(value).encode()) - def delete(self, *args, **kwargs): - # Cleanup tenant defaults that reference this provider - try: - tenant_cfg = LighthouseTenantConfiguration.objects.get( - tenant_id=self.tenant_id - ) - except LighthouseTenantConfiguration.DoesNotExist: - tenant_cfg = None - - if tenant_cfg: - updated = False - defaults = tenant_cfg.default_models or {} - if self.provider_type in defaults: - defaults.pop(self.provider_type, None) - tenant_cfg.default_models = defaults - updated = True - - if tenant_cfg.default_provider == self.provider_type: - tenant_cfg.default_provider = "" - updated = True - - if updated: - tenant_cfg.save() - - return super().delete(*args, **kwargs) - class Meta(RowLevelSecurityProtectedModel.Meta): db_table = "lighthouse_provider_configurations" diff --git a/api/src/backend/api/signals.py b/api/src/backend/api/signals.py index aac89ea33e..d449144bf4 100644 --- a/api/src/backend/api/signals.py +++ b/api/src/backend/api/signals.py @@ -6,7 +6,14 @@ from django.dispatch import receiver from django_celery_results.backends.database import DatabaseBackend from api.db_utils import delete_related_daily_task -from api.models import Membership, Provider, TenantAPIKey, User +from api.models import ( + LighthouseProviderConfiguration, + LighthouseTenantConfiguration, + Membership, + Provider, + TenantAPIKey, + User, +) def create_task_result_on_publish(sender=None, headers=None, **kwargs): # noqa: F841 @@ -56,3 +63,33 @@ def revoke_membership_api_keys(sender, instance, **kwargs): # noqa: F841 TenantAPIKey.objects.filter( entity=instance.user, tenant_id=instance.tenant.id ).update(revoked=True) + + +@receiver(pre_delete, sender=LighthouseProviderConfiguration) +def cleanup_lighthouse_defaults_before_delete(sender, instance, **kwargs): # noqa: F841 + """ + Ensure tenant Lighthouse defaults do not reference a soon-to-be-deleted provider. + + This runs for both per-instance deletes and queryset (bulk) deletes. + """ + try: + tenant_cfg = LighthouseTenantConfiguration.objects.get( + tenant_id=instance.tenant_id + ) + except LighthouseTenantConfiguration.DoesNotExist: + return + + updated = False + defaults = tenant_cfg.default_models or {} + + if instance.provider_type in defaults: + defaults.pop(instance.provider_type, None) + tenant_cfg.default_models = defaults + updated = True + + if tenant_cfg.default_provider == instance.provider_type: + tenant_cfg.default_provider = "" + updated = True + + if updated: + tenant_cfg.save()