fix: move lighthouse provider delete cleanup to pre_delete signal

This commit is contained in:
Chandrapal Badshah
2025-10-20 20:14:20 +05:30
parent c64c86d8a3
commit 59255c0b76
2 changed files with 38 additions and 27 deletions
-26
View File
@@ -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"
+38 -1
View File
@@ -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()