From 3671bbbc78dcfa37f2d6e2dffbbb24527ffc7060 Mon Sep 17 00:00:00 2001 From: Victor Gorchilov Date: Thu, 20 Apr 2023 21:55:58 +0300 Subject: [PATCH] Fixes #276: Delete RoleImages when their DeviceRole is deleted (#279) * [fix] get only valid role images * [up] add post delete signals for device roles * [fix] move signal registration in `apps.py` * [fix] register signals in plugin config & filter valid role images * [fix] undo role image filter as it is wrong and unnecessary * [up] revert formatting with black --- netbox_topology_views/__init__.py | 6 +++++- netbox_topology_views/signals.py | 14 ++++++++++++++ netbox_topology_views/views.py | 2 +- 3 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 netbox_topology_views/signals.py diff --git a/netbox_topology_views/__init__.py b/netbox_topology_views/__init__.py index c33addd..64fe8e7 100644 --- a/netbox_topology_views/__init__.py +++ b/netbox_topology_views/__init__.py @@ -14,8 +14,12 @@ class TopologyViewsConfig(PluginConfig): "static_image_directory": "netbox_topology_views/img", "allow_coordinates_saving": False, "always_save_coordinates": False, - } + def ready(self): + from . import signals + + super().ready() + config = TopologyViewsConfig diff --git a/netbox_topology_views/signals.py b/netbox_topology_views/signals.py new file mode 100644 index 0000000..b9dc6b3 --- /dev/null +++ b/netbox_topology_views/signals.py @@ -0,0 +1,14 @@ +from typing import Type + +from dcim.models import DeviceRole +from django.contrib.contenttypes.models import ContentType +from django.db.models.signals import pre_delete +from django.dispatch import receiver + +from netbox_topology_views.models import RoleImage + + +@receiver(pre_delete, sender=DeviceRole, dispatch_uid="delete_hanging_role_image") +def delete_hanging_role_image(sender: Type[DeviceRole], instance: DeviceRole, **kwargs): + ct = ContentType.objects.get_for_model(sender) + RoleImage.objects.filter(content_type=ct, object_id=instance.id).delete() diff --git a/netbox_topology_views/views.py b/netbox_topology_views/views.py index 1cd3446..7ae88b6 100644 --- a/netbox_topology_views/views.py +++ b/netbox_topology_views/views.py @@ -806,4 +806,4 @@ class TopologyIndividualOptionsView(PermissionRequiredMixin, View): "form": form, "object": queryset, }, - ) \ No newline at end of file + )