From fe016d63ce15d948b8ff435b7e4fdde01c35885b Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Thu, 21 Oct 2021 22:07:30 +0200 Subject: [PATCH] Prepare `harness.populate_bom()` --- src/wireviz/DataClasses.py | 7 ++++++- src/wireviz/Harness.py | 34 ++++++++++++++++++++++++++-------- src/wireviz/wireviz.py | 2 ++ src/wireviz/wv_bom.py | 2 ++ src/wireviz/wv_gv_html.py | 6 +----- src/wireviz/wv_helper.py | 4 ++++ src/wireviz/wv_html.py | 2 +- 7 files changed, 42 insertions(+), 15 deletions(-) diff --git a/src/wireviz/DataClasses.py b/src/wireviz/DataClasses.py index 1440437..cce7148 100644 --- a/src/wireviz/DataClasses.py +++ b/src/wireviz/DataClasses.py @@ -253,7 +253,7 @@ class Component: class AdditionalComponent(Component): qty: float = 1 unit: Optional[str] = None - qty_multiplier: Union[ConnectorMultiplier, CableMultiplier, None] = None + qty_multiplier: Union[ConnectorMultiplier, CableMultiplier, None] = 1 designators: Optional[str] = None # used for components definedi in the # additional_bom_items section within another component bgcolor: SingleColor = None # ^ same here @@ -262,6 +262,10 @@ class AdditionalComponent(Component): super().fill_partnumbers() self.bgcolor = SingleColor(self.bgcolor) + @property + def qty_final(self): + return 999 + @property def description(self) -> str: substrs = [self.type, self.subtype if self.subtype else ""] @@ -428,6 +432,7 @@ class Connector(TopLevelGraphicalComponent): self.ports_right = True def get_qty_multiplier(self, qty_multiplier: Optional[ConnectorMultiplier]) -> int: + # TODO!!! how and when to compute final qty for additional components??? if not qty_multiplier: return 1 elif qty_multiplier == "pincount": diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index d619a1c..1d722e7 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -55,17 +55,17 @@ class Harness: def add_connector(self, designator: str, *args, **kwargs) -> None: conn = Connector(designator=designator, *args, **kwargs) self.connectors[designator] = conn - self._add_to_internal_bom(conn) + # self._add_to_internal_bom(conn) def add_cable(self, designator: str, *args, **kwargs) -> None: cbl = Cable(designator=designator, *args, **kwargs) self.cables[designator] = cbl - self._add_to_internal_bom(cbl) + # self._add_to_internal_bom(cbl) def add_additional_bom_item(self, item: dict) -> None: new_item = AdditionalComponent(**item) self.additional_bom_items.append(new_item) - self._add_to_internal_bom(new_item) + # self._add_to_internal_bom(new_item) def add_mate_pin(self, from_name, from_pin, to_name, to_pin, arrow_str) -> None: from_con = self.connectors[from_name] @@ -115,7 +115,7 @@ class Harness: _add( comp.bom_hash, designator=item.designator, - qty=comp.qty, + qty=comp.qty_final, category="connector/additional", ) elif isinstance(item, Cable): @@ -123,29 +123,47 @@ class Harness: if item.category == "bundle": _cat = "wire" for wire in item.wire_objects: - _add(None, qty=item.length+.001, designator=item.designator, category="wire DUMMY") + _add( + None, + qty=item.length + 0.001, + designator=item.designator, + category="wire DUMMY", + ) else: _cat = "cable" - _add(item.bom_hash, qty=item.length, designator=item.designator, category="cable") + _add( + item.bom_hash, + qty=item.length, + designator=item.designator, + category="cable", + ) for comp in item.additional_components: if comp.ignore_in_bom: continue _add( comp.bom_hash, designator=item.designator, - qty=comp.qty, + qty=comp.qty_final, category=f"{_cat}/additional", ) elif isinstance(item, AdditionalComponent): # additional component _add( item.bom_hash, designator=item.designators, - qty=item.qty, + qty=item.qty_final, category="additional", ) else: raise Exception(f"Unknown type of item:\n{item}") + def populate_bom(self): + pass + # raise Exception( + # "Implement BOM population after all connections have been made, " + # " so that additional component qty's can be computed correctly " + # "(factoring in number of connected pins/wires/...)" + # ) + def connect( self, from_name: str, diff --git a/src/wireviz/wireviz.py b/src/wireviz/wireviz.py index 4478f99..2c6ca77 100755 --- a/src/wireviz/wireviz.py +++ b/src/wireviz/wireviz.py @@ -370,6 +370,8 @@ def parse( for line in yaml_data["additional_bom_items"]: harness.add_additional_bom_item(line) + harness.populate_bom() + if output_formats: harness.output(filename=output_file, fmt=output_formats, view=False) diff --git a/src/wireviz/wv_bom.py b/src/wireviz/wv_bom.py index f8a0c3b..9cc0fbe 100644 --- a/src/wireviz/wv_bom.py +++ b/src/wireviz/wv_bom.py @@ -5,6 +5,8 @@ from dataclasses import dataclass from enum import Enum from typing import List, Optional, Union +from wireviz.wv_helper import html_line_breaks + BOM_HASH_FIELDS = "description unit partnumbers" BomHash = namedtuple("BomHash", BOM_HASH_FIELDS) BomHashList = namedtuple("BomHashList", BOM_HASH_FIELDS) diff --git a/src/wireviz/wv_gv_html.py b/src/wireviz/wv_gv_html.py index ba5dcf1..160e412 100644 --- a/src/wireviz/wv_gv_html.py +++ b/src/wireviz/wv_gv_html.py @@ -19,7 +19,7 @@ from wireviz.DataClasses import ( WireClass, ) from wireviz.wv_bom import partnumbers_to_list -from wireviz.wv_helper import remove_links +from wireviz.wv_helper import html_line_breaks, remove_links from wireviz.wv_table_util import * # TODO: explicitly import each needed tag later @@ -454,10 +454,6 @@ def html_size_attr_dict(image): return attr_dict -def html_line_breaks(inp): - return remove_links(inp).replace("\n", "
") if isinstance(inp, str) else inp - - def set_dot_basics(dot, options): dot.body.append(f"// Graph generated by {APP_NAME} {__version__}\n") dot.body.append(f"// {APP_URL}\n") diff --git a/src/wireviz/wv_helper.py b/src/wireviz/wv_helper.py index f86dfa3..f1b4993 100644 --- a/src/wireviz/wv_helper.py +++ b/src/wireviz/wv_helper.py @@ -100,6 +100,10 @@ def tuplelist2tsv(inp, header=None): return output +def html_line_breaks(inp): + return remove_links(inp).replace("\n", "
") if isinstance(inp, str) else inp + + def remove_links(inp): return ( re.sub(r"<[aA] [^>]*>([^<]*)", r"\1", inp) diff --git a/src/wireviz/wv_html.py b/src/wireviz/wv_html.py index fb70d1b..16a5d58 100644 --- a/src/wireviz/wv_html.py +++ b/src/wireviz/wv_html.py @@ -6,9 +6,9 @@ from typing import Dict, List, Union from wireviz import APP_NAME, APP_URL, __version__, wv_colors from wireviz.DataClasses import Metadata, Options -from wireviz.wv_gv_html import html_line_breaks from wireviz.wv_helper import ( flatten2d, + html_line_breaks, open_file_read, open_file_write, smart_file_resolve,