From 12db28fab66fe11cfc2c04549d4c1e55478344f0 Mon Sep 17 00:00:00 2001 From: Daniel Sheppard Date: Fri, 31 Jan 2020 09:54:37 -0600 Subject: [PATCH] Fixes: #3016 - Add wrapper for post_save and post_delete signals --- netbox/circuits/signals.py | 3 +++ netbox/dcim/signals.py | 6 ++++++ netbox/extras/signals.py | 10 ++++++++++ 3 files changed, 19 insertions(+) diff --git a/netbox/circuits/signals.py b/netbox/circuits/signals.py index 86db21400..2344d2f9d 100644 --- a/netbox/circuits/signals.py +++ b/netbox/circuits/signals.py @@ -2,9 +2,12 @@ from django.db.models.signals import post_delete, post_save from django.dispatch import receiver from django.utils import timezone +from extras.signals import disable_for_loaddata + from .models import Circuit, CircuitTermination +@disable_for_loaddata @receiver((post_save, post_delete), sender=CircuitTermination) def update_circuit(instance, **kwargs): """ diff --git a/netbox/dcim/signals.py b/netbox/dcim/signals.py index 71ee7ec3c..44b1496a9 100644 --- a/netbox/dcim/signals.py +++ b/netbox/dcim/signals.py @@ -1,9 +1,12 @@ from django.db.models.signals import post_save, pre_delete from django.dispatch import receiver +from extras.signals import disable_for_loaddata + from .models import Cable, Device, VirtualChassis +@disable_for_loaddata @receiver(post_save, sender=VirtualChassis) def assign_virtualchassis_master(instance, created, **kwargs): """ @@ -17,6 +20,7 @@ def assign_virtualchassis_master(instance, created, **kwargs): device.save() +@disable_for_loaddata @receiver(pre_delete, sender=VirtualChassis) def clear_virtualchassis_members(instance, **kwargs): """ @@ -29,6 +33,7 @@ def clear_virtualchassis_members(instance, **kwargs): device.save() +@disable_for_loaddata @receiver(post_save, sender=Cable) def update_connected_endpoints(instance, **kwargs): """ @@ -54,6 +59,7 @@ def update_connected_endpoints(instance, **kwargs): endpoint_b.save() +@disable_for_loaddata @receiver(pre_delete, sender=Cable) def nullify_connected_endpoints(instance, **kwargs): """ diff --git a/netbox/extras/signals.py b/netbox/extras/signals.py index 1c20ba6dc..ccb418d0a 100644 --- a/netbox/extras/signals.py +++ b/netbox/extras/signals.py @@ -1,6 +1,7 @@ from cacheops.signals import cache_invalidated, cache_read from django.dispatch import Signal from prometheus_client import Counter +from functools import wraps # @@ -12,6 +13,15 @@ cacheops_cache_miss = Counter('cacheops_cache_miss', 'Number of cache misses') cacheops_cache_invalidated = Counter('cacheops_cache_invalidated', 'Number of cache invalidations') +def disable_for_loaddata(signal_handler): + @wraps(signal_handler) + def wrapper(*args, **kwargs): + if kwargs['raw']: + return + signal_handler(*args, **kwargs) + return wrapper + + def cache_read_collector(sender, func, hit, **kwargs): if hit: cacheops_cache_hit.inc()