From 557122c4a35d61aee3d1b76f25225e00d1965eb8 Mon Sep 17 00:00:00 2001 From: KV Date: Wed, 22 May 2024 02:22:42 +0200 Subject: [PATCH] Look-up mated connectors before mate processing (#358) Symptom reported in #355: Unable to connect an arrow (mate) to pins higher than 1 without failing: ValueError: X is not in list Bug: The code processing mates used a mix of repeated connector look-ups and local connector variables, and one variable was used before it was assigned the correct value. Fix: The local connector variables are now both assigned initially before processing each mate, and used when processing instead of repeated connector look-ups. --- src/wireviz/Harness.py | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index 30468a6..51287a2 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -595,6 +595,7 @@ class Harness: typecheck("tweak.append", self.tweak.append, str) dot.body.append(self.tweak.append) + # TODO: All code below until "return dot" must be moved above all tweak processing! for mate in self.mates: if mate.shape[0] == "<" and mate.shape[-1] == ">": dir = "both" @@ -613,29 +614,18 @@ class Harness: raise Exception(f"{mate} is an unknown mate") from_connector = self.connectors[mate.from_name] - if ( - isinstance(mate, MatePin) - and self.connectors[mate.from_name].style != "simple" - ): + to_connector = self.connectors[mate.to_name] + if isinstance(mate, MatePin) and from_connector.style != "simple": from_pin_index = from_connector.pins.index(mate.from_pin) from_port_str = f":p{from_pin_index+1}r" else: # MateComponent or style == 'simple' from_port_str = "" - if ( - isinstance(mate, MatePin) - and self.connectors[mate.to_name].style != "simple" - ): + if isinstance(mate, MatePin) and to_connector.style != "simple": to_pin_index = to_connector.pins.index(mate.to_pin) - to_port_str = ( - f":p{to_pin_index+1}l" - if isinstance(mate, MatePin) - and self.connectors[mate.to_name].style != "simple" - else "" - ) + to_port_str = f":p{to_pin_index+1}l" else: # MateComponent or style == 'simple' to_port_str = "" code_from = f"{mate.from_name}{from_port_str}:e" - to_connector = self.connectors[mate.to_name] code_to = f"{mate.to_name}{to_port_str}:w" dot.attr("edge", color=color, style="dashed", dir=dir)