From 20622e0346f4232bbe5ade750b9cdbe8129753c2 Mon Sep 17 00:00:00 2001 From: Tyler Ward Date: Thu, 1 Oct 2020 23:40:57 +0100 Subject: [PATCH] Move qty_multiplier functions into Connector and cable dataclasses Also rename long_name to description --- src/wireviz/DataClasses.py | 27 ++++++++++++++++++++++++++- src/wireviz/Harness.py | 23 +++++++++++------------ src/wireviz/wv_helper.py | 28 ---------------------------- 3 files changed, 37 insertions(+), 41 deletions(-) diff --git a/src/wireviz/DataClasses.py b/src/wireviz/DataClasses.py index 355d6c9..cbf23f5 100644 --- a/src/wireviz/DataClasses.py +++ b/src/wireviz/DataClasses.py @@ -10,6 +10,7 @@ from wireviz import wv_colors ConnectorMultiplier = str # = Literal['pincount', 'populated'] CableMultiplier = str # = Literal['wirecount', 'terminations', 'length', 'total_length'] + @dataclass class Image: gv_dir: InitVar[Path] # Directory of .gv file injected as context during parsing @@ -56,7 +57,7 @@ class AdditionalComponent: unit: Optional[str] = None qty_multiplier: Union[ConnectorMultiplier, CableMultiplier, None] = None - def long_name(self) -> str: + def description(self) -> str: name_subtype = f', {self.subtype}' if self.subtype else '' return f'{self.type.capitalize()}{name_subtype}' @@ -140,6 +141,16 @@ class Connector: def activate_pin(self, pin): self.visible_pins[pin] = True + def get_qty_multiplier(self, qty_multiplier: Optional[ConnectorMultiplier]) -> int: + if not qty_multiplier: + return 1 + elif qty_multiplier == 'pincount': + return self.pincount + elif qty_multiplier == 'populated': + return sum(self.visible_pins.values()) + else: + raise ValueError(f'invalid qty multiplier parameter for connector {qty_multiplier}') + @dataclass class Cable: @@ -235,6 +246,20 @@ class Cable: # self.connections.append((from_name, from_pin[i], via_pin[i], to_name, to_pin[i])) self.connections.append(Connection(from_name, from_pin[i], via_pin[i], to_name, to_pin[i])) + def get_qty_multiplier(self, qty_multiplier: Optional[CableMultiplier]) -> float: + if not qty_multiplier: + return 1 + elif qty_multiplier == 'wirecount': + return self.wirecount + elif qty_multiplier == 'terminations': + return len(self.connections) + elif qty_multiplier == 'length': + return self.length + elif qty_multiplier == 'total_length': + return self.length * self.wirecount + else: + raise ValueError(f'invalid qty multiplier parameter for cable {qty_multiplier}') + @dataclass class Connection: diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index 9b6d5aa..fafb4c2 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -9,8 +9,7 @@ from wireviz.wv_helper import awg_equiv, mm2_equiv, tuplelist2tsv, \ nested_html_table, flatten2d, index_if_list, html_line_breaks, \ graphviz_line_breaks, remove_line_breaks, open_file_read, open_file_write, \ html_colorbar, html_image, html_caption, manufacturer_info_field, \ - component_table_entry, \ - calculate_qty_multiplier_connector, calculate_qty_multiplier_cable + component_table_entry from collections import Counter from typing import List from pathlib import Path @@ -107,12 +106,12 @@ class Harness: if connector.additional_components: rows.append(["Additional components"]) for extra in connector.additional_components: - qty = extra.qty * calculate_qty_multiplier_connector(extra.qty_multiplier, connector) + qty = extra.qty * connector.get_qty_multiplier(extra.qty_multiplier) if(self.mini_bom_mode): - id = self.get_bom_index(extra.long_name(), extra.unit, extra.manufacturer, extra.mpn, extra.pn) + id = self.get_bom_index(extra.description(), extra.unit, extra.manufacturer, extra.mpn, extra.pn) rows.append(component_table_entry(f'{id} ({extra.type.capitalize()})', qty, extra.unit)) else: - rows.append(component_table_entry(extra.long_name(), qty, extra.unit, extra.pn, extra.manufacturer, extra.mpn)) + rows.append(component_table_entry(extra.description(), qty, extra.unit, extra.pn, extra.manufacturer, extra.mpn)) rows.append([html_line_breaks(connector.notes)]) html.extend(nested_html_table(rows)) @@ -190,12 +189,12 @@ class Harness: if cable.additional_components: rows.append(["Additional components"]) for extra in cable.additional_components: - qty = extra.qty * calculate_qty_multiplier_cable(extra.qty_multiplier, cable) + qty = extra.qty * cable.get_qty_multiplier(extra.qty_multiplier) if(self.mini_bom_mode): - id = self.get_bom_index(extra.long_name(), extra.unit, extra.manufacturer, extra.mpn, extra.pn) + id = self.get_bom_index(extra.description(), extra.unit, extra.manufacturer, extra.mpn, extra.pn) rows.append(component_table_entry(f'{id} ({extra.type.capitalize()})', qty, extra.unit)) else: - rows.append(component_table_entry(extra.long_name(), qty, extra.unit, extra.pn, extra.manufacturer, extra.mpn)) + rows.append(component_table_entry(extra.description(), qty, extra.unit, extra.pn, extra.manufacturer, extra.mpn)) rows.append([html_line_breaks(cable.notes)]) html.extend(nested_html_table(rows)) @@ -371,10 +370,10 @@ class Harness: bom_items.append(item) for part in connector.additional_components: - qty = part.qty * calculate_qty_multiplier_connector(part.qty_multiplier, connector) + qty = part.qty * connector.get_qty_multiplier(part.qty_multiplier) bom_items.append( { - 'item': part.long_name(), + 'item': part.description(), 'qty': qty, 'unit': part.unit, 'manufacturer': part.manufacturer, @@ -409,10 +408,10 @@ class Harness: bom_items.append(item) for part in cable.additional_components: - qty = part.qty * calculate_qty_multiplier_cable(part.qty_multiplier, cable) + qty = part.qty * cable.get_qty_multiplier(part.qty_multiplier) bom_items.append( { - 'item': part.long_name(), + 'item': part.description(), 'qty': qty, 'unit': part.unit, 'manufacturer': part.manufacturer, diff --git a/src/wireviz/wv_helper.py b/src/wireviz/wv_helper.py index d6dd5f1..af101d8 100644 --- a/src/wireviz/wv_helper.py +++ b/src/wireviz/wv_helper.py @@ -200,31 +200,3 @@ def component_table_entry(type, qty, unit=None, pn=None, manufacturer=None, mpn= output = html_line_breaks(output) # format the above output as left aligned text in a single visable cell return f'
{output}
' - - -def calculate_qty_multiplier_connector(qty_multiplier, connector): - if not qty_multiplier: - return 1 - - if qty_multiplier == 'pincount': - return connector.pincount - elif qty_multiplier == 'populated': - return sum(connector.visible_pins.values()) - else: - raise ValueError(f'invalid qty multiplier parameter for connector {qty_multiplier}') - - -def calculate_qty_multiplier_cable(qty_multiplier, cable): - if not qty_multiplier: - return 1 - - if qty_multiplier == 'wirecount': - return cable.wirecount - elif qty_multiplier == 'terminations': - return len(cable.connections) - elif qty_multiplier == 'length': - return cable.length - elif qty_multiplier == 'total_length': - return cable.length * cable.wirecount - else: - raise ValueError(f'invalid qty multiplier parameter for cable {qty_multiplier}')