diff --git a/netbox/circuits/signals.py b/netbox/circuits/signals.py index 8193b29e8..70f2abb41 100644 --- a/netbox/circuits/signals.py +++ b/netbox/circuits/signals.py @@ -23,5 +23,5 @@ def rebuild_cablepaths(instance, raw=False, **kwargs): """ if not raw: peer_termination = instance.get_peer_termination() - # if peer_termination: - # rebuild_paths(peer_termination) + if peer_termination: + rebuild_paths([peer_termination]) diff --git a/netbox/dcim/signals.py b/netbox/dcim/signals.py index dcc7ee33e..10d2ee9c5 100644 --- a/netbox/dcim/signals.py +++ b/netbox/dcim/signals.py @@ -100,8 +100,8 @@ def update_connected_endpoints(instance, created, raw=False, **kwargs): # Examine type of first termination to determine object type (all must be the same) if isinstance(terms[0], PathEndpoint): create_cablepath(terms) - # else: - # rebuild_paths(terms) + else: + rebuild_paths(terms) # elif instance.status != instance._orig_status: # # We currently don't support modifying either termination of an existing Cable. (This # # may change in the future.) However, we do need to capture status changes and update diff --git a/netbox/dcim/utils.py b/netbox/dcim/utils.py index 47a9bacec..0ea5f4580 100644 --- a/netbox/dcim/utils.py +++ b/netbox/dcim/utils.py @@ -52,16 +52,17 @@ def create_cablepath(terminations): cp.save() -def rebuild_paths(obj): +def rebuild_paths(terminations): """ Rebuild all CablePaths which traverse the specified node """ from dcim.models import CablePath - cable_paths = CablePath.objects.filter(path__contains=obj) + for obj in terminations: + cable_paths = CablePath.objects.filter(_nodes__contains=obj) - with transaction.atomic(): - for cp in cable_paths: - cp.delete() - if cp.origin: - create_cablepath(cp.origin) + with transaction.atomic(): + for cp in cable_paths: + cp.delete() + origins = [path_node_to_object(node) for node in cp.path[0]] + create_cablepath(origins)