Просмотр исходного кода

Fixes #11184: Correct visualization of cable path which splits across multiple circuit terminations

jeremystretch 3 лет назад
Родитель
Сommit
f882dcabf7
2 измененных файлов с 11 добавлено и 3 удалено
  1. 1 0
      docs/release-notes/version-3.4.md
  2. 10 3
      netbox/dcim/models/cables.py

+ 1 - 0
docs/release-notes/version-3.4.md

@@ -11,6 +11,7 @@
 
 * [#11175](https://github.com/netbox-community/netbox/issues/11175) - Fix cloning of fields containing special characters
 * [#11178](https://github.com/netbox-community/netbox/issues/11178) - Pressing enter in quick search box should not trigger bulk operations
+* [#11184](https://github.com/netbox-community/netbox/issues/11184) - Correct visualization of cable path which splits across multiple circuit terminations
 * [#11185](https://github.com/netbox-community/netbox/issues/11185) - Fix TemplateSyntaxError when viewing custom script results
 * [#11189](https://github.com/netbox-community/netbox/issues/11189) - Fix localization of dates & numbers
 * [#11205](https://github.com/netbox-community/netbox/issues/11205) - Correct cloning behavior for recursively-nested models

+ 10 - 3
netbox/dcim/models/cables.py

@@ -567,11 +567,12 @@ class CablePath(models.Model):
 
             elif isinstance(remote_terminations[0], CircuitTermination):
                 # Follow a CircuitTermination to its corresponding CircuitTermination (A to Z or vice versa)
-                term_side = remote_terminations[0].term_side
-                assert all(ct.term_side == term_side for ct in remote_terminations[1:])
+                if len(remote_terminations) > 1:
+                    is_split = True
+                    break
                 circuit_termination = CircuitTermination.objects.filter(
                     circuit=remote_terminations[0].circuit,
-                    term_side='Z' if term_side == 'A' else 'A'
+                    term_side='Z' if remote_terminations[0].term_side == 'A' else 'A'
                 ).first()
                 if circuit_termination is None:
                     break
@@ -685,6 +686,7 @@ class CablePath(models.Model):
         """
         Return all available next segments in a split cable path.
         """
+        from circuits.models import CircuitTermination
         nodes = self.path_objects[-1]
 
         # RearPort splitting to multiple FrontPorts with no stack position
@@ -694,3 +696,8 @@ class CablePath(models.Model):
         # RearPorts connected to different cables
         elif type(nodes[0]) is FrontPort:
             return RearPort.objects.filter(pk__in=[fp.rear_port_id for fp in nodes])
+        # Cable terminating to multiple CircuitTerminations
+        elif type(nodes[0]) is CircuitTermination:
+            return [
+                ct.get_peer_termination() for ct in nodes
+            ]