From c33a19708c8e5ccd3c687f145729ae37c63cf34e Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Sun, 17 Oct 2021 15:33:41 +0200 Subject: [PATCH] Refactor code (squashed commit) Refactor connector node generation Further refactor connector node generation Rebuild demos Generate gauge string inside Cable object WIP: refactor cable node generation Implement HTML indentation WIP More WIP Remove old stuff, slightly simplify code Outsource `gv_pin_table()`, simplify padding Add TODOs Outsource `set_dot_basics()` and `apply_dot_tweaks()` Make setting HTML tag attributes easier through `kwargs` Fix and simplify bgcolor logic Reactivate cable edge generation Outsource `gv_edge_wire()` Make connecting things more object-oriented Alphabetize HTML tags, improve bgcolor rendering Make mates object-oriented Run `autoflake -i` Run `autoflake -i --remove-all-unused-imports` Streamline assignment of ports to simple connectors Implement color objects Use color objects in WireViz Re-sort `wv_colors.py` Make green color darker Break longer lines not caught by `black` because they were unbroken strings or comments Make variable name more expressive Apply dot tweaks last Remove unused line Improve subclassing of components, prepare for BOM refactoring Clean up Include nested additional components in BOM do not add autogenerated designators to BOM Improve BOM generation (TODO: wires from a bundle) Prepare `harness.populate_bom()` Change `description` to `type` in additional BOM item YAML Define CLI epilog str in single statement Rename modules, adjust imports, move `build_examples.py` Restructure and update `.gitignore` Clarify `wireviz.parse()` input types Implement BOM population (missing: qty multipliers) Make `pin_objects` and `wire_objects` dictionaries Compute qty's of additional components (WIP) Add qty test file Adapt `tutorial08.yml` (remove `unit` field) Add `tabulate` to dependency list (might remove later if not needed) Sort BOM by category, assign BOM IDs Rename `Options.color_mode` to `.color_output_mod` for consistency Change BOM output file extension from `.bom.tsv` to `.tsv` Implement BOM bubbles Stop recursive nesting of additional components Add BOM bubble to additional component list (WIP) Fix gauge conversion Fix line breaks in code Optimize BOM bubble geometry Implement pin color output Small issue: GraphViz warning ``` Warning: table size too small for content ``` Add some test files to `tests/` directory Update test files Allow multiple colors for components Implement multiple colors for components, improve multicolor table rendering Fix color cell implementation Fix node background color rendering Add test file for node and title bgcolors WIP: BOM modes Add TODO for empty connector pin tables Comment out BOM modes (WIP) and BOM bubbles Resume work on BOM Include part number info in BOM table Fix BOM output in TSV and HTML Add bundles' wires' part number info to BOM Add TODOs Implement bundle part number rendering Improve conductor table rendering Fix additional component BOM table layout Disable CLI BOM output Add suggestions from #246 Add suggestions from #186 Add .vscode/ to .gitignore Fix PyLance problems Update interim version number Fix zero-size cell for simple connectors without type Implement additional parameters dict for components Implement note for additional components Thicken additional component table Add placeholder for add.comp. PN info Apply black --- .github/workflows/main.yml | 4 +- .gitignore | 28 +- examples/demo01.html | 2 + examples/demo01.png | Bin 64020 -> 64428 bytes examples/demo01.svg | 2 + examples/demo02.html | 6 + examples/demo02.png | Bin 188704 -> 189607 bytes examples/demo02.svg | 6 + requirements.txt | 1 + setup.py | 7 +- src/wireviz/DataClasses.py | 441 ------------ src/wireviz/Harness.py | 705 ------------------- src/wireviz/__init__.py | 2 +- src/wireviz/svgembed.py | 52 -- src/wireviz/{ => tools}/build_examples.py | 9 +- src/wireviz/wireviz.py | 56 +- src/wireviz/wv_bom.py | 372 +++------- src/wireviz/wv_cli.py | 24 +- src/wireviz/wv_colors.py | 355 +++++----- src/wireviz/wv_dataclasses.py | 815 ++++++++++++++++++++++ src/wireviz/wv_graphviz.py | 618 ++++++++++++++++ src/wireviz/wv_gv_html.py | 111 --- src/wireviz/wv_harness.py | 431 ++++++++++++ src/wireviz/wv_html.py | 208 +++--- src/wireviz/wv_output.py | 164 +++++ src/wireviz/{wv_helper.py => wv_utils.py} | 19 +- tests/.gitignore | 8 + tests/bom/bomqty.yml | 65 ++ tests/rendering/00_minimal.yml | 26 + tests/rendering/01_color_single.yml | 32 + tests/rendering/02_color_multi.yml | 35 + tests/rendering/03_bgcolors.yml | 51 ++ tutorial/tutorial08.yml | 5 +- 33 files changed, 2764 insertions(+), 1896 deletions(-) delete mode 100644 src/wireviz/DataClasses.py delete mode 100644 src/wireviz/Harness.py delete mode 100644 src/wireviz/svgembed.py rename src/wireviz/{ => tools}/build_examples.py (96%) create mode 100644 src/wireviz/wv_dataclasses.py create mode 100644 src/wireviz/wv_graphviz.py delete mode 100644 src/wireviz/wv_gv_html.py create mode 100644 src/wireviz/wv_harness.py create mode 100644 src/wireviz/wv_output.py rename src/wireviz/{wv_helper.py => wv_utils.py} (89%) create mode 100644 tests/.gitignore create mode 100644 tests/bom/bomqty.yml create mode 100644 tests/rendering/00_minimal.yml create mode 100644 tests/rendering/01_color_single.yml create mode 100644 tests/rendering/02_color_multi.yml create mode 100644 tests/rendering/03_bgcolors.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d539aa2..fe576b0 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -22,11 +22,11 @@ jobs: python -m pip install --upgrade pip pip install . - name: Create Examples - run: PYTHONPATH=$(pwd)/src:$PYTHONPATH cd src/wireviz/ && python build_examples.py + run: PYTHONPATH=$(pwd)/src:$PYTHONPATH && python src/wireviz/tools/build_examples.py - name: Upload examples, demos, and tutorials uses: actions/upload-artifact@v2 with: name: examples-and-tutorials path: | examples/ - tutorial/ \ No newline at end of file + tutorial/ diff --git a/.gitignore b/.gitignore index 7484ecb..dc58d27 100644 --- a/.gitignore +++ b/.gitignore @@ -1,15 +1,21 @@ +# OS-specific files .DS_Store +desktop.ini +Thumbs.db + +# Development aids .idea/ -.eggs -__pycache__ -.*.swp -*.egg-info -*.pyc -build -data -dist +.vscode/ +temp/ venv/ .venv/ -desktop.ini -thumbs.db -temp/ + +# Build/compile/release artifacts +build/ +dist/ +*.egg-info +*.pyc + +# Other temporary files +__pycache__ +.*.swp diff --git a/examples/demo01.html b/examples/demo01.html index c7b557b..8dcb550 100644 --- a/examples/demo01.html +++ b/examples/demo01.html @@ -41,6 +41,7 @@ X1 + X1 @@ -162,6 +163,7 @@ X2 + X2 diff --git a/examples/demo01.png b/examples/demo01.png index 75ac33326f449d797d3c934cbf90c161630ef096..179147d40af80914f3f4c48b272f91804bd1757b 100644 GIT binary patch literal 64428 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�tlzlJu#EDz8-y$P86csfXNNDlUxbV}b10lc& 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 f|GOZ(@OzzIN3wX0Q2QvZ?#V diff --git a/examples/demo01.svg b/examples/demo01.svg index 7f284b7..03b2a4b 100644 --- a/examples/demo01.svg +++ b/examples/demo01.svg @@ -12,6 +12,7 @@ X1 + X1 @@ -133,6 +134,7 @@ X2 + X2 diff --git a/examples/demo02.html b/examples/demo02.html index 1002edd..8fe7c47 100644 --- a/examples/demo02.html +++ b/examples/demo02.html @@ -199,6 +199,7 @@ X1 + X1 @@ -445,6 +446,7 @@ X2 + X2 @@ -474,6 +476,7 @@ X3 + X3 @@ -503,6 +506,7 @@ X4 + X4 @@ -536,6 +540,7 @@ AUTOGENERATED_F_1 + Crimp ferrule @@ -581,6 +586,7 @@ AUTOGENERATED_F_2 + Crimp ferrule diff --git a/examples/demo02.png b/examples/demo02.png index 667267704f56e435a495791a2525a0d14ebfec64..f7dd69188130f0292ecca718b122bc78a878c71e 100644 GIT binary patch literal 189607 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℘z?CeQ4!vT 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�hLUjhxp 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 diff --git a/examples/demo02.svg b/examples/demo02.svg index a23c9f6..130922b 100644 --- a/examples/demo02.svg +++ b/examples/demo02.svg @@ -12,6 +12,7 @@ X1 + X1 @@ -258,6 +259,7 @@ X2 + X2 @@ -287,6 +289,7 @@ X3 + X3 @@ -316,6 +319,7 @@ X4 + X4 @@ -349,6 +353,7 @@ AUTOGENERATED_F_1 + Crimp ferrule @@ -394,6 +399,7 @@ AUTOGENERATED_F_2 + Crimp ferrule diff --git a/requirements.txt b/requirements.txt index 07564c3..9405dd1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,3 +3,4 @@ graphviz pillow pyyaml setuptools +tabulate diff --git a/setup.py b/setup.py index 6ce5013..8ef73a6 100644 --- a/setup.py +++ b/setup.py @@ -15,13 +15,14 @@ setup( author="Daniel Rojas", # author_email='', description="Easily document cables and wiring harnesses", - long_description=open(README_PATH).read(), + long_description=README_PATH.read_text(), long_description_content_type="text/markdown", install_requires=[ "click", - "pyyaml", - "pillow", "graphviz", + "pillow", + "pyyaml", + "tabulate", ], license="GPLv3", keywords="cable connector hardware harness wiring wiring-diagram wiring-harness", diff --git a/src/wireviz/DataClasses.py b/src/wireviz/DataClasses.py deleted file mode 100644 index cdefddd..0000000 --- a/src/wireviz/DataClasses.py +++ /dev/null @@ -1,441 +0,0 @@ -# -*- coding: utf-8 -*- - -from dataclasses import InitVar, dataclass, field -from enum import Enum, auto -from pathlib import Path -from typing import Dict, List, Optional, Tuple, Union - -from wireviz.wv_colors import COLOR_CODES, Color, ColorMode, Colors, ColorScheme -from wireviz.wv_helper import aspect_ratio, int2tuple - -# Each type alias have their legal values described in comments - validation might be implemented in the future -PlainText = str # Text not containing HTML tags nor newlines -Hypertext = str # Text possibly including HTML hyperlinks that are removed in all outputs except HTML output -MultilineHypertext = ( - str # Hypertext possibly also including newlines to break lines in diagram output -) - -Designator = PlainText # Case insensitive unique name of connector or cable - -# Literal type aliases below are commented to avoid requiring python 3.8 -ConnectorMultiplier = PlainText # = Literal['pincount', 'populated'] -CableMultiplier = ( - PlainText # = Literal['wirecount', 'terminations', 'length', 'total_length'] -) -ImageScale = PlainText # = Literal['false', 'true', 'width', 'height', 'both'] - -# Type combinations -Pin = Union[int, PlainText] # Pin identifier -PinIndex = int # Zero-based pin index -Wire = Union[int, PlainText] # Wire number or Literal['s'] for shield -NoneOrMorePins = Union[ - Pin, Tuple[Pin, ...], None -] # None, one, or a tuple of pin identifiers -NoneOrMorePinIndices = Union[ - PinIndex, Tuple[PinIndex, ...], None -] # None, one, or a tuple of zero-based pin indices -OneOrMoreWires = Union[Wire, Tuple[Wire, ...]] # One or a tuple of wires - -# Metadata can contain whatever is needed by the HTML generation/template. -MetadataKeys = PlainText # Literal['title', 'description', 'notes', ...] - - -Side = Enum("Side", "LEFT RIGHT") - -AUTOGENERATED_PREFIX = "AUTOGENERATED_" - - -class Metadata(dict): - pass - - -@dataclass -class Options: - fontname: PlainText = "arial" - bgcolor: Color = "WH" - bgcolor_node: Optional[Color] = "WH" - bgcolor_connector: Optional[Color] = None - bgcolor_cable: Optional[Color] = None - bgcolor_bundle: Optional[Color] = None - color_mode: ColorMode = "SHORT" - mini_bom_mode: bool = True - template_separator: str = "." - - def __post_init__(self): - if not self.bgcolor_node: - self.bgcolor_node = self.bgcolor - if not self.bgcolor_connector: - self.bgcolor_connector = self.bgcolor_node - if not self.bgcolor_cable: - self.bgcolor_cable = self.bgcolor_node - if not self.bgcolor_bundle: - self.bgcolor_bundle = self.bgcolor_cable - - -@dataclass -class Tweak: - override: Optional[Dict[Designator, Dict[str, Optional[str]]]] = None - append: Union[str, List[str], None] = None - - -@dataclass -class Image: - # Attributes of the image object : - src: str - scale: Optional[ImageScale] = None - # Attributes of the image cell containing the image: - width: Optional[int] = None - height: Optional[int] = None - fixedsize: Optional[bool] = None - bgcolor: Optional[Color] = None - # Contents of the text cell just below the image cell: - caption: Optional[MultilineHypertext] = None - # See also HTML doc at https://graphviz.org/doc/info/shapes.html#html - - def __post_init__(self): - - if self.fixedsize is None: - # Default True if any dimension specified unless self.scale also is specified. - self.fixedsize = (self.width or self.height) and self.scale is None - - if self.scale is None: - if not self.width and not self.height: - self.scale = "false" - elif self.width and self.height: - self.scale = "both" - else: - self.scale = "true" # When only one dimension is specified. - - if self.fixedsize: - # If only one dimension is specified, compute the other - # because Graphviz requires both when fixedsize=True. - if self.height: - if not self.width: - self.width = self.height * aspect_ratio(self.src) - else: - if self.width: - self.height = self.width / aspect_ratio(self.src) - - -@dataclass -class AdditionalComponent: - type: MultilineHypertext - subtype: Optional[MultilineHypertext] = None - manufacturer: Optional[MultilineHypertext] = None - mpn: Optional[MultilineHypertext] = None - supplier: Optional[MultilineHypertext] = None - spn: Optional[MultilineHypertext] = None - pn: Optional[Hypertext] = None - qty: float = 1 - unit: Optional[str] = None - qty_multiplier: Union[ConnectorMultiplier, CableMultiplier, None] = None - bgcolor: Optional[Color] = None - - @property - def description(self) -> str: - s = self.type.rstrip() + f", {self.subtype.rstrip()}" if self.subtype else "" - return s - - -@dataclass -class Connector: - name: Designator - bgcolor: Optional[Color] = None - bgcolor_title: Optional[Color] = None - manufacturer: Optional[MultilineHypertext] = None - mpn: Optional[MultilineHypertext] = None - supplier: Optional[MultilineHypertext] = None - spn: Optional[MultilineHypertext] = None - pn: Optional[Hypertext] = None - style: Optional[str] = None - category: Optional[str] = None - type: Optional[MultilineHypertext] = None - subtype: Optional[MultilineHypertext] = None - pincount: Optional[int] = None - image: Optional[Image] = None - notes: Optional[MultilineHypertext] = None - pins: List[Pin] = field(default_factory=list) - pinlabels: List[Pin] = field(default_factory=list) - pincolors: List[Color] = field(default_factory=list) - color: Optional[Color] = None - show_name: Optional[bool] = None - show_pincount: Optional[bool] = None - hide_disconnected_pins: bool = False - loops: List[List[Pin]] = field(default_factory=list) - ignore_in_bom: bool = False - additional_components: List[AdditionalComponent] = field(default_factory=list) - - @property - def is_autogenerated(self): - return self.name.startswith(AUTOGENERATED_PREFIX) - - def __post_init__(self) -> None: - - if isinstance(self.image, dict): - self.image = Image(**self.image) - - self.ports_left = False - self.ports_right = False - self.visible_pins = {} - - if self.style == "simple": - if self.pincount and self.pincount > 1: - raise Exception( - "Connectors with style set to simple may only have one pin" - ) - self.pincount = 1 - - if not self.pincount: - self.pincount = max( - len(self.pins), len(self.pinlabels), len(self.pincolors) - ) - if not self.pincount: - raise Exception( - "You need to specify at least one, pincount, pins, pinlabels, or pincolors" - ) - - # create default list for pins (sequential) if not specified - if not self.pins: - self.pins = list(range(1, self.pincount + 1)) - - if len(self.pins) != len(set(self.pins)): - raise Exception("Pins are not unique") - - if self.show_name is None: - self.show_name = self.style != "simple" and not self.is_autogenerated - - if self.show_pincount is None: - # hide pincount for simple (1 pin) connectors by default - self.show_pincount = self.style != "simple" - - for loop in self.loops: - # TODO: allow using pin labels in addition to pin numbers, just like when defining regular connections - # TODO: include properties of wire used to create the loop - if len(loop) != 2: - raise Exception("Loops must be between exactly two pins!") - for pin in loop: - if pin not in self.pins: - raise Exception(f'Unknown loop pin "{pin}" for connector "{self.name}"!') - # Make sure loop connected pins are not hidden. - self.activate_pin(pin) - - for i, item in enumerate(self.additional_components): - if isinstance(item, dict): - self.additional_components[i] = AdditionalComponent(**item) - - def activate_pin(self, pin: Pin, side: Side) -> None: - self.visible_pins[pin] = True - if side == Side.LEFT: - self.ports_left = True - elif side == Side.RIGHT: - self.ports_right = 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: - name: Designator - bgcolor: Optional[Color] = None - bgcolor_title: Optional[Color] = None - manufacturer: Union[MultilineHypertext, List[MultilineHypertext], None] = None - mpn: Union[MultilineHypertext, List[MultilineHypertext], None] = None - supplier: Union[MultilineHypertext, List[MultilineHypertext], None] = None - spn: Union[MultilineHypertext, List[MultilineHypertext], None] = None - pn: Union[Hypertext, List[Hypertext], None] = None - category: Optional[str] = None - type: Optional[MultilineHypertext] = None - gauge: Optional[float] = None - gauge_unit: Optional[str] = None - show_equiv: bool = False - length: float = 0 - length_unit: Optional[str] = None - color: Optional[Color] = None - wirecount: Optional[int] = None - shield: Union[bool, Color] = False - image: Optional[Image] = None - notes: Optional[MultilineHypertext] = None - colors: List[Colors] = field(default_factory=list) - wirelabels: List[Wire] = field(default_factory=list) - color_code: Optional[ColorScheme] = None - show_name: Optional[bool] = None - show_wirecount: bool = True - show_wirenumbers: Optional[bool] = None - ignore_in_bom: bool = False - additional_components: List[AdditionalComponent] = field(default_factory=list) - - @property - def is_autogenerated(self): - return self.name.startswith(AUTOGENERATED_PREFIX) - - def __post_init__(self) -> None: - - if isinstance(self.image, dict): - self.image = Image(**self.image) - - if isinstance(self.gauge, str): # gauge and unit specified - try: - g, u = self.gauge.split(" ") - except Exception: - raise Exception( - f"Cable {self.name} gauge={self.gauge} - Gauge must be a number, or number and unit separated by a space" - ) - self.gauge = g - - if self.gauge_unit is not None: - print( - f"Warning: Cable {self.name} gauge_unit={self.gauge_unit} is ignored because its gauge contains {u}" - ) - if u.upper() == "AWG": - self.gauge_unit = u.upper() - else: - self.gauge_unit = u.replace("mm2", "mm\u00B2") - - elif self.gauge is not None: # gauge specified, assume mm2 - if self.gauge_unit is None: - self.gauge_unit = "mm\u00B2" - else: - pass # gauge not specified - - if isinstance(self.length, str): # length and unit specified - try: - L, u = self.length.split(" ") - L = float(L) - except Exception: - raise Exception( - f"Cable {self.name} length={self.length} - Length must be a number, or number and unit separated by a space" - ) - self.length = L - if self.length_unit is not None: - print( - f"Warning: Cable {self.name} length_unit={self.length_unit} is ignored because its length contains {u}" - ) - self.length_unit = u - elif not any(isinstance(self.length, t) for t in [int, float]): - raise Exception(f"Cable {self.name} length has a non-numeric value") - elif self.length_unit is None: - self.length_unit = "m" - - self.connections = [] - - if self.wirecount: # number of wires explicitly defined - if self.colors: # use custom color palette (partly or looped if needed) - pass - elif self.color_code: - # use standard color palette (partly or looped if needed) - if self.color_code not in COLOR_CODES: - raise Exception("Unknown color code") - self.colors = COLOR_CODES[self.color_code] - else: # no colors defined, add dummy colors - self.colors = [""] * self.wirecount - - # make color code loop around if more wires than colors - if self.wirecount > len(self.colors): - m = self.wirecount // len(self.colors) + 1 - self.colors = self.colors * int(m) - # cut off excess after looping - self.colors = self.colors[: self.wirecount] - else: # wirecount implicit in length of color list - if not self.colors: - raise Exception( - "Unknown number of wires. Must specify wirecount or colors (implicit length)" - ) - self.wirecount = len(self.colors) - - if self.wirelabels: - if self.shield and "s" in self.wirelabels: - raise Exception( - '"s" may not be used as a wire label for a shielded cable.' - ) - - # if lists of part numbers are provided check this is a bundle and that it matches the wirecount. - for idfield in [self.manufacturer, self.mpn, self.supplier, self.spn, self.pn]: - if isinstance(idfield, list): - if self.category == "bundle": - # check the length - if len(idfield) != self.wirecount: - raise Exception("lists of part data must match wirecount") - else: - raise Exception("lists of part data are only supported for bundles") - - if self.show_name is None: - self.show_name = not self.is_autogenerated - - if self.show_wirenumbers is None: - # by default, show wire numbers for cables, hide for bundles - self.show_wirenumbers = self.category != "bundle" - - for i, item in enumerate(self.additional_components): - if isinstance(item, dict): - self.additional_components[i] = AdditionalComponent(**item) - - # The *_pin arguments accept a tuple, but it seems not in use with the current code. - def connect( - self, - from_name: Optional[Designator], - from_pin: NoneOrMorePinIndices, - via_wire: OneOrMoreWires, - to_name: Optional[Designator], - to_pin: NoneOrMorePinIndices, - ) -> None: - - from_pin = int2tuple(from_pin) - via_wire = int2tuple(via_wire) - to_pin = int2tuple(to_pin) - if len(from_pin) != len(to_pin): - raise Exception("from_pin must have the same number of elements as to_pin") - for i, _ in enumerate(from_pin): - self.connections.append( - Connection(from_name, from_pin[i], via_wire[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: - from_name: Optional[Designator] - from_pin: Optional[Pin] - via_port: Wire - to_name: Optional[Designator] - to_pin: Optional[Pin] - - -@dataclass -class MatePin: - from_name: Designator - from_pin: Pin - to_name: Designator - to_pin: Pin - shape: str - - -@dataclass -class MateComponent: - from_name: Designator - to_name: Designator - shape: str diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py deleted file mode 100644 index d99786f..0000000 --- a/src/wireviz/Harness.py +++ /dev/null @@ -1,705 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -from collections import Counter -from dataclasses import dataclass -from itertools import zip_longest -from pathlib import Path -from typing import Any, List, Union - -from graphviz import Graph - -from wireviz import APP_NAME, APP_URL, __version__, wv_colors -from wireviz.DataClasses import ( - Cable, - Connector, - MateComponent, - MatePin, - Metadata, - Options, - Side, - Tweak, -) -from wireviz.svgembed import embed_svg_images_file -from wireviz.wv_bom import ( - HEADER_MPN, - HEADER_PN, - HEADER_SPN, - bom_list, - component_table_entry, - generate_bom, - get_additional_component_table, - pn_info_string, -) -from wireviz.wv_colors import get_color_hex, translate_color -from wireviz.wv_gv_html import ( - html_bgcolor, - html_bgcolor_attr, - html_caption, - html_colorbar, - html_image, - html_line_breaks, - nested_html_table, - remove_links, -) -from wireviz.wv_helper import ( - awg_equiv, - flatten2d, - is_arrow, - mm2_equiv, - open_file_read, - open_file_write, - tuplelist2tsv, -) -from wireviz.wv_html import generate_html_output - - -@dataclass -class Harness: - metadata: Metadata - options: Options - tweak: Tweak - - def __post_init__(self): - self.connectors = {} - self.cables = {} - self.mates = [] - self._bom = [] # Internal Cache for generated bom - self.additional_bom_items = [] - - def add_connector(self, name: str, *args, **kwargs) -> None: - self.connectors[name] = Connector(name, *args, **kwargs) - - def add_cable(self, name: str, *args, **kwargs) -> None: - self.cables[name] = Cable(name, *args, **kwargs) - - def add_mate_pin(self, from_name, from_pin, to_name, to_pin, arrow_type) -> None: - self.mates.append(MatePin(from_name, from_pin, to_name, to_pin, arrow_type)) - self.connectors[from_name].activate_pin(from_pin, Side.RIGHT) - self.connectors[to_name].activate_pin(to_pin, Side.LEFT) - - def add_mate_component(self, from_name, to_name, arrow_type) -> None: - self.mates.append(MateComponent(from_name, to_name, arrow_type)) - - def add_bom_item(self, item: dict) -> None: - self.additional_bom_items.append(item) - - def connect( - self, - from_name: str, - from_pin: (int, str), - via_name: str, - via_wire: (int, str), - to_name: str, - to_pin: (int, str), - ) -> None: - # check from and to connectors - for (name, pin) in zip([from_name, to_name], [from_pin, to_pin]): - if name is not None and name in self.connectors: - connector = self.connectors[name] - # check if provided name is ambiguous - if pin in connector.pins and pin in connector.pinlabels: - if connector.pins.index(pin) != connector.pinlabels.index(pin): - raise Exception( - f"{name}:{pin} is defined both in pinlabels and pins, for different pins." - ) - # TODO: Maybe issue a warning if present in both lists but referencing the same pin? - if pin in connector.pinlabels: - if connector.pinlabels.count(pin) > 1: - raise Exception(f"{name}:{pin} is defined more than once.") - index = connector.pinlabels.index(pin) - pin = connector.pins[index] # map pin name to pin number - if name == from_name: - from_pin = pin - if name == to_name: - to_pin = pin - if not pin in connector.pins: - raise Exception(f"{name}:{pin} not found.") - - # check via cable - if via_name in self.cables: - cable = self.cables[via_name] - # check if provided name is ambiguous - if via_wire in cable.colors and via_wire in cable.wirelabels: - if cable.colors.index(via_wire) != cable.wirelabels.index(via_wire): - raise Exception( - f"{via_name}:{via_wire} is defined both in colors and wirelabels, for different wires." - ) - # TODO: Maybe issue a warning if present in both lists but referencing the same wire? - if via_wire in cable.colors: - if cable.colors.count(via_wire) > 1: - raise Exception( - f"{via_name}:{via_wire} is used for more than one wire." - ) - # list index starts at 0, wire IDs start at 1 - via_wire = cable.colors.index(via_wire) + 1 - elif via_wire in cable.wirelabels: - if cable.wirelabels.count(via_wire) > 1: - raise Exception( - f"{via_name}:{via_wire} is used for more than one wire." - ) - via_wire = ( - cable.wirelabels.index(via_wire) + 1 - ) # list index starts at 0, wire IDs start at 1 - - # perform the actual connection - self.cables[via_name].connect(from_name, from_pin, via_wire, to_name, to_pin) - if from_name in self.connectors: - self.connectors[from_name].activate_pin(from_pin, Side.RIGHT) - if to_name in self.connectors: - self.connectors[to_name].activate_pin(to_pin, Side.LEFT) - - def create_graph(self) -> Graph: - dot = Graph() - dot.body.append(f"// Graph generated by {APP_NAME} {__version__}\n") - dot.body.append(f"// {APP_URL}\n") - dot.attr( - "graph", - rankdir="LR", - ranksep="2", - bgcolor=wv_colors.translate_color(self.options.bgcolor, "HEX"), - nodesep="0.33", - fontname=self.options.fontname, - ) - dot.attr( - "node", - shape="none", - width="0", - height="0", - margin="0", # Actual size of the node is entirely determined by the label. - style="filled", - fillcolor=wv_colors.translate_color(self.options.bgcolor_node, "HEX"), - fontname=self.options.fontname, - ) - dot.attr("edge", style="bold", fontname=self.options.fontname) - - for connector in self.connectors.values(): - - # If no wires connected (except maybe loop wires)? - if not (connector.ports_left or connector.ports_right): - connector.ports_left = True # Use left side pins. - - html = [] - # fmt: off - rows = [[f'{html_bgcolor(connector.bgcolor_title)}{remove_links(connector.name)}' - if connector.show_name else None], - [pn_info_string(HEADER_PN, None, remove_links(connector.pn)), - html_line_breaks(pn_info_string(HEADER_MPN, connector.manufacturer, connector.mpn)), - html_line_breaks(pn_info_string(HEADER_SPN, connector.supplier, connector.spn))], - [html_line_breaks(connector.type), - html_line_breaks(connector.subtype), - f'{connector.pincount}-pin' if connector.show_pincount else None, - translate_color(connector.color, self.options.color_mode) if connector.color else None, - html_colorbar(connector.color)], - '' if connector.style != 'simple' else None, - [html_image(connector.image)], - [html_caption(connector.image)]] - # fmt: on - - rows.extend(get_additional_component_table(self, connector)) - rows.append([html_line_breaks(connector.notes)]) - html.extend(nested_html_table(rows, html_bgcolor_attr(connector.bgcolor))) - - if connector.style != "simple": - pinhtml = [] - pinhtml.append( - '' - ) - - for pinindex, (pinname, pinlabel, pincolor) in enumerate( - zip_longest( - connector.pins, connector.pinlabels, connector.pincolors - ) - ): - if ( - connector.hide_disconnected_pins - and not connector.visible_pins.get(pinname, False) - ): - continue - - pinhtml.append(" ") - if connector.ports_left: - pinhtml.append(f' ') - if pinlabel: - pinhtml.append(f" ") - if connector.pincolors: - if pincolor in wv_colors._color_hex.keys(): - # fmt: off - pinhtml.append(f' ') - pinhtml.append( ' ') - # fmt: on - else: - pinhtml.append(' ') - - if connector.ports_right: - pinhtml.append(f' ') - pinhtml.append(" ") - - pinhtml.append("
{pinname}{pinlabel}{translate_color(pincolor, self.options.color_mode)}') - pinhtml.append( ' ') - pinhtml.append(f' ') - pinhtml.append( '
') - pinhtml.append( '
{pinname}
") - - html = [ - row.replace("", "\n".join(pinhtml)) - for row in html - ] - - html = "\n".join(html) - dot.node( - connector.name, - label=f"<\n{html}\n>", - shape="box", - style="filled", - fillcolor=translate_color(self.options.bgcolor_connector, "HEX"), - ) - - if len(connector.loops) > 0: - dot.attr("edge", color="#000000:#ffffff:#000000") - if connector.ports_left: - loop_side = "l" - loop_dir = "w" - elif connector.ports_right: - loop_side = "r" - loop_dir = "e" - else: - raise Exception("No side for loops") - for loop in connector.loops: - dot.edge( - f"{connector.name}:p{loop[0]}{loop_side}:{loop_dir}", - f"{connector.name}:p{loop[1]}{loop_side}:{loop_dir}", - ) - - # determine if there are double- or triple-colored wires in the harness; - # if so, pad single-color wires to make all wires of equal thickness - pad = any( - len(colorstr) > 2 - for cable in self.cables.values() - for colorstr in cable.colors - ) - - for cable in self.cables.values(): - - html = [] - - awg_fmt = "" - if cable.show_equiv: - # Only convert units we actually know about, i.e. currently - # mm2 and awg --- other units _are_ technically allowed, - # and passed through as-is. - if cable.gauge_unit == "mm\u00B2": - awg_fmt = f" ({awg_equiv(cable.gauge)} AWG)" - elif cable.gauge_unit.upper() == "AWG": - awg_fmt = f" ({mm2_equiv(cable.gauge)} mm\u00B2)" - - # fmt: off - rows = [[f'{html_bgcolor(cable.bgcolor_title)}{remove_links(cable.name)}' - if cable.show_name else None], - [pn_info_string(HEADER_PN, None, - remove_links(cable.pn)) if not isinstance(cable.pn, list) else None, - html_line_breaks(pn_info_string(HEADER_MPN, - cable.manufacturer if not isinstance(cable.manufacturer, list) else None, - cable.mpn if not isinstance(cable.mpn, list) else None)), - html_line_breaks(pn_info_string(HEADER_SPN, - cable.supplier if not isinstance(cable.supplier, list) else None, - cable.spn if not isinstance(cable.spn, list) else None))], - [html_line_breaks(cable.type), - f'{cable.wirecount}x' if cable.show_wirecount else None, - f'{cable.gauge} {cable.gauge_unit}{awg_fmt}' if cable.gauge else None, - '+ S' if cable.shield else None, - f'{cable.length} {cable.length_unit}' if cable.length > 0 else None, - translate_color(cable.color, self.options.color_mode) if cable.color else None, - html_colorbar(cable.color)], - '', - [html_image(cable.image)], - [html_caption(cable.image)]] - # fmt: on - - rows.extend(get_additional_component_table(self, cable)) - rows.append([html_line_breaks(cable.notes)]) - html.extend(nested_html_table(rows, html_bgcolor_attr(cable.bgcolor))) - - wirehtml = [] - # conductor table - wirehtml.append('') - wirehtml.append(" ") - - for i, (connection_color, wirelabel) in enumerate( - zip_longest(cable.colors, cable.wirelabels), 1 - ): - wirehtml.append(" ") - wirehtml.append(f" ") - wirehtml.append(f" ") - wirehtml.append(f" ") - wirehtml.append(" ") - - # fmt: off - bgcolors = ['#000000'] + get_color_hex(connection_color, pad=pad) + ['#000000'] - wirehtml.append(f" ") - wirehtml.append(f' ") - wirehtml.append(" ") - # fmt: on - - # for bundles, individual wires can have part information - if cable.category == "bundle": - # create a list of wire parameters - wireidentification = [] - if isinstance(cable.pn, list): - wireidentification.append( - pn_info_string( - HEADER_PN, None, remove_links(cable.pn[i - 1]) - ) - ) - manufacturer_info = pn_info_string( - HEADER_MPN, - cable.manufacturer[i - 1] - if isinstance(cable.manufacturer, list) - else None, - cable.mpn[i - 1] if isinstance(cable.mpn, list) else None, - ) - supplier_info = pn_info_string( - HEADER_SPN, - cable.supplier[i - 1] - if isinstance(cable.supplier, list) - else None, - cable.spn[i - 1] if isinstance(cable.spn, list) else None, - ) - if manufacturer_info: - wireidentification.append(html_line_breaks(manufacturer_info)) - if supplier_info: - wireidentification.append(html_line_breaks(supplier_info)) - # print parameters into a table row under the wire - if len(wireidentification) > 0: - # fmt: off - wirehtml.append(' ") - # fmt: on - - if cable.shield: - wirehtml.append(" ") # spacer - wirehtml.append(" ") - wirehtml.append(" ") - wirehtml.append(" ") - wirehtml.append(" ") - wirehtml.append(" ") - if isinstance(cable.shield, str): - # shield is shown with specified color and black borders - shield_color_hex = wv_colors.get_color_hex(cable.shield)[0] - attributes = ( - f'height="6" bgcolor="{shield_color_hex}" border="2" sides="tb"' - ) - else: - # shield is shown as a thin black wire - attributes = f'height="2" bgcolor="#000000" border="0"' - # fmt: off - wirehtml.append(f' ') - # fmt: on - - wirehtml.append(" ") - wirehtml.append("
 
") - - wireinfo = [] - if cable.show_wirenumbers: - wireinfo.append(str(i)) - colorstr = wv_colors.translate_color( - connection_color, self.options.color_mode - ) - if colorstr: - wireinfo.append(colorstr) - if cable.wirelabels: - wireinfo.append(wirelabel if wirelabel is not None else "") - wirehtml.append(f' {":".join(wireinfo)}') - - wirehtml.append(f"
') - wirehtml.append(' ') - for j, bgcolor in enumerate(bgcolors[::-1]): # Reverse to match the curved wires when more than 2 colors - wirehtml.append(f' ') - wirehtml.append("
") - wirehtml.append("
') - wirehtml.append(' ') - for attrib in wireidentification: - wirehtml.append(f" ") - wirehtml.append("
{attrib}
") - wirehtml.append("
 
Shield
 
") - - html = [ - row.replace("", "\n".join(wirehtml)) for row in html - ] - - # connections - for connection in cable.connections: - if isinstance(connection.via_port, int): - # check if it's an actual wire and not a shield - dot.attr( - "edge", - color=":".join( - ["#000000"] - + wv_colors.get_color_hex( - cable.colors[connection.via_port - 1], pad=pad - ) - + ["#000000"] - ), - ) - else: # it's a shield connection - # shield is shown with specified color and black borders, or as a thin black wire otherwise - dot.attr( - "edge", - color=":".join(["#000000", shield_color_hex, "#000000"]) - if isinstance(cable.shield, str) - else "#000000", - ) - if connection.from_pin is not None: # connect to left - from_connector = self.connectors[connection.from_name] - from_pin_index = from_connector.pins.index(connection.from_pin) - from_port_str = ( - f":p{from_pin_index+1}r" - if from_connector.style != "simple" - else "" - ) - code_left_1 = f"{connection.from_name}{from_port_str}:e" - code_left_2 = f"{cable.name}:w{connection.via_port}:w" - dot.edge(code_left_1, code_left_2) - if from_connector.show_name: - from_info = [ - str(connection.from_name), - str(connection.from_pin), - ] - if from_connector.pinlabels: - pinlabel = from_connector.pinlabels[from_pin_index] - if pinlabel != "": - from_info.append(pinlabel) - from_string = ":".join(from_info) - else: - from_string = "" - html = [ - row.replace(f"", from_string) - for row in html - ] - if connection.to_pin is not None: # connect to right - to_connector = self.connectors[connection.to_name] - to_pin_index = to_connector.pins.index(connection.to_pin) - to_port_str = ( - f":p{to_pin_index+1}l" if to_connector.style != "simple" else "" - ) - code_right_1 = f"{cable.name}:w{connection.via_port}:e" - code_right_2 = f"{connection.to_name}{to_port_str}:w" - dot.edge(code_right_1, code_right_2) - if to_connector.show_name: - to_info = [str(connection.to_name), str(connection.to_pin)] - if to_connector.pinlabels: - pinlabel = to_connector.pinlabels[to_pin_index] - if pinlabel != "": - to_info.append(pinlabel) - to_string = ":".join(to_info) - else: - to_string = "" - html = [ - row.replace(f"", to_string) - for row in html - ] - - style, bgcolor = ( - ("filled,dashed", self.options.bgcolor_bundle) - if cable.category == "bundle" - else ("filled", self.options.bgcolor_cable) - ) - html = "\n".join(html) - dot.node( - cable.name, - label=f"<\n{html}\n>", - shape="box", - style=style, - fillcolor=translate_color(bgcolor, "HEX"), - ) - - def typecheck(name: str, value: Any, expect: type) -> None: - if not isinstance(value, expect): - raise Exception( - f"Unexpected value type of {name}: Expected {expect}, got {type(value)}\n{value}" - ) - - # TODO?: Differ between override attributes and HTML? - if self.tweak.override is not None: - typecheck("tweak.override", self.tweak.override, dict) - for k, d in self.tweak.override.items(): - typecheck(f"tweak.override.{k} key", k, str) - typecheck(f"tweak.override.{k} value", d, dict) - for a, v in d.items(): - typecheck(f"tweak.override.{k}.{a} key", a, str) - typecheck(f"tweak.override.{k}.{a} value", v, (str, type(None))) - - # Override generated attributes of selected entries matching tweak.override. - for i, entry in enumerate(dot.body): - if isinstance(entry, str): - # Find a possibly quoted keyword after leading TAB(s) and followed by [ ]. - match = re.match( - r'^\t*(")?((?(1)[^"]|[^ "])+)(?(1)") \[.*\]$', entry, re.S - ) - keyword = match and match[2] - if keyword in self.tweak.override.keys(): - for attr, value in self.tweak.override[keyword].items(): - if value is None: - entry, n_subs = re.subn( - f'( +)?{attr}=("[^"]*"|[^] ]*)(?(1)| *)', "", entry - ) - if n_subs < 1: - print( - f"Harness.create_graph() warning: {attr} not found in {keyword}!" - ) - elif n_subs > 1: - print( - f"Harness.create_graph() warning: {attr} removed {n_subs} times in {keyword}!" - ) - continue - - if len(value) == 0 or " " in value: - value = value.replace('"', r"\"") - value = f'"{value}"' - entry, n_subs = re.subn( - f'{attr}=("[^"]*"|[^] ]*)', f"{attr}={value}", entry - ) - if n_subs < 1: - # If attr not found, then append it - entry = re.sub(r"\]$", f" {attr}={value}]", entry) - elif n_subs > 1: - print( - f"Harness.create_graph() warning: {attr} overridden {n_subs} times in {keyword}!" - ) - - dot.body[i] = entry - - if self.tweak.append is not None: - if isinstance(self.tweak.append, list): - for i, element in enumerate(self.tweak.append, 1): - typecheck(f"tweak.append[{i}]", element, str) - dot.body.extend(self.tweak.append) - else: - typecheck("tweak.append", self.tweak.append, str) - dot.body.append(self.tweak.append) - - for mate in self.mates: - if mate.shape[0] == "<" and mate.shape[-1] == ">": - dir = "both" - elif mate.shape[0] == "<": - dir = "back" - elif mate.shape[-1] == ">": - dir = "forward" - else: - dir = "none" - - if isinstance(mate, MatePin): - color = "#000000" - elif isinstance(mate, MateComponent): - color = "#000000:#000000" - else: - 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" - ): - 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" - ): - 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 "" - ) - 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) - dot.edge(code_from, code_to) - - return dot - - # cache for the GraphViz Graph object - # do not access directly, use self.graph instead - _graph = None - - @property - def graph(self): - if not self._graph: # no cached graph exists, generate one - self._graph = self.create_graph() - return self._graph # return cached graph - - @property - def png(self): - from io import BytesIO - - graph = self.graph - data = BytesIO() - data.write(graph.pipe(format="png")) - data.seek(0) - return data.read() - - @property - def svg(self): - graph = self.graph - return embed_svg_images(graph.pipe(format="svg").decode("utf-8"), Path.cwd()) - - def output( - self, - filename: (str, Path), - view: bool = False, - cleanup: bool = True, - fmt: tuple = ("html", "png", "svg", "tsv"), - ) -> None: - # graphical output - graph = self.graph - svg_already_exists = Path( - f"{filename}.svg" - ).exists() # if SVG already exists, do not delete later - # graphical output - for f in fmt: - if f in ("png", "svg", "html"): - if f == "html": # if HTML format is specified, - f = "svg" # generate SVG for embedding into HTML - # SVG file will be renamed/deleted later - _filename = f"{filename}.tmp" if f == "svg" else filename - # TODO: prevent rendering SVG twice when both SVG and HTML are specified - graph.format = f - graph.render(filename=_filename, view=view, cleanup=cleanup) - # embed images into SVG output - if "svg" in fmt or "html" in fmt: - embed_svg_images_file(f"{filename}.tmp.svg") - # GraphViz output - if "gv" in fmt: - graph.save(filename=f"{filename}.gv") - # BOM output - bomlist = bom_list(self.bom()) - if "tsv" in fmt: - open_file_write(f"{filename}.bom.tsv").write(tuplelist2tsv(bomlist)) - if "csv" in fmt: - # TODO: implement CSV output (preferrably using CSV library) - print("CSV output is not yet supported") - # HTML output - if "html" in fmt: - generate_html_output(filename, bomlist, self.metadata, self.options) - # PDF output - if "pdf" in fmt: - # TODO: implement PDF output - print("PDF output is not yet supported") - # delete SVG if not needed - if "html" in fmt and not "svg" in fmt: - # SVG file was just needed to generate HTML - Path(f"{filename}.tmp.svg").unlink() - elif "svg" in fmt: - Path(f"{filename}.tmp.svg").replace(f"{filename}.svg") - - def bom(self): - if not self._bom: - self._bom = generate_bom(self) - return self._bom diff --git a/src/wireviz/__init__.py b/src/wireviz/__init__.py index 08f7167..68cde20 100644 --- a/src/wireviz/__init__.py +++ b/src/wireviz/__init__.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Please don't import anything in this file to avoid issues when it is imported in setup.py -__version__ = "0.4-dev" +__version__ = "0.4-dev-refactored" CMD_NAME = "wireviz" # Lower case command and module name APP_NAME = "WireViz" # Application name in texts meant to be human readable diff --git a/src/wireviz/svgembed.py b/src/wireviz/svgembed.py deleted file mode 100644 index ab6b9f1..0000000 --- a/src/wireviz/svgembed.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- coding: utf-8 -*- - -import base64 -import re -from pathlib import Path -from typing import Union - -mime_subtype_replacements = {"jpg": "jpeg", "tif": "tiff"} - - -def embed_svg_images(svg_in: str, base_path: Union[str, Path] = Path.cwd()) -> str: - images_b64 = {} # cache of base64-encoded images - - def image_tag(pre: str, url: str, post: str) -> str: - return f'' - - def replace(match: re.Match) -> str: - imgurl = match["URL"] - if not imgurl in images_b64: # only encode/cache every unique URL once - imgurl_abs = (Path(base_path) / imgurl).resolve() - image = imgurl_abs.read_bytes() - images_b64[imgurl] = base64.b64encode(image).decode("utf-8") - return image_tag( - match["PRE"] or "", - f"data:image/{get_mime_subtype(imgurl)};base64, {images_b64[imgurl]}", - match["POST"] or "", - ) - - pattern = re.compile( - image_tag(r"(?P

 [^>]*?)?", r'(?P[^"]*?)', r"(?P [^>]*?)?"),
-        re.IGNORECASE,
-    )
-    return pattern.sub(replace, svg_in)
-
-
-def get_mime_subtype(filename: Union[str, Path]) -> str:
-    mime_subtype = Path(filename).suffix.lstrip(".").lower()
-    if mime_subtype in mime_subtype_replacements:
-        mime_subtype = mime_subtype_replacements[mime_subtype]
-    return mime_subtype
-
-
-def embed_svg_images_file(
-    filename_in: Union[str, Path], overwrite: bool = True
-) -> None:
-    filename_in = Path(filename_in).resolve()
-    filename_out = filename_in.with_suffix(".b64.svg")
-    filename_out.write_text(
-        embed_svg_images(filename_in.read_text(), filename_in.parent)
-    )
-    if overwrite:
-        filename_out.replace(filename_in)
diff --git a/src/wireviz/build_examples.py b/src/wireviz/tools/build_examples.py
similarity index 96%
rename from src/wireviz/build_examples.py
rename to src/wireviz/tools/build_examples.py
index e54d0f5..fe9ba4a 100755
--- a/src/wireviz/build_examples.py
+++ b/src/wireviz/tools/build_examples.py
@@ -7,13 +7,12 @@ import sys
 from pathlib import Path
 
 script_path = Path(__file__).absolute()
-
-sys.path.insert(0, str(script_path.parent.parent))  # to find wireviz module
-from wv_helper import open_file_append, open_file_read, open_file_write
+sys.path.insert(0, str(script_path.parent.parent.parent))  # to find wireviz module
 
 from wireviz import APP_NAME, __version__, wireviz
+from wireviz.wv_utils import open_file_append, open_file_read, open_file_write
 
-dir = script_path.parent.parent.parent
+dir = script_path.parent.parent.parent.parent
 readme = "readme.md"
 groups = {
     "examples": {
@@ -98,7 +97,7 @@ def clean_generated(groupkeys):
         for filename in collect_filenames("Cleaning", key, generated_extensions):
             if filename.is_file():
                 print(f'  rm "{filename}"')
-                Path(filename).unlink()
+                filename.unlink()
 
 
 def compare_generated(groupkeys, branch="", include_graphviz_output=False):
diff --git a/src/wireviz/wireviz.py b/src/wireviz/wireviz.py
index 05369ae..dce05ad 100755
--- a/src/wireviz/wireviz.py
+++ b/src/wireviz/wireviz.py
@@ -10,9 +10,9 @@ import yaml
 if __name__ == "__main__":
     sys.path.insert(0, str(Path(__file__).parent.parent))  # add src/wireviz to PATH
 
-from wireviz.DataClasses import AUTOGENERATED_PREFIX, Metadata, Options, Tweak
-from wireviz.Harness import Harness
-from wireviz.wv_helper import (
+from wireviz.wv_dataclasses import AUTOGENERATED_PREFIX, Metadata, Options, Tweak
+from wireviz.wv_harness import Harness
+from wireviz.wv_utils import (
     expand,
     get_single_key_and_value,
     is_arrow,
@@ -34,7 +34,7 @@ def parse(
     and outputs the result as one or more files and/or as a function return value
 
     Accepted inputs:
-        * A path to a YAML source file to parse
+        * A Path object or a path-like string pointing to a YAML source file to parse
         * A string containing the YAML data to parse
         * A Python Dict containing the pre-parsed YAML data
 
@@ -93,7 +93,8 @@ def parse(
         output_file = output_dir / output_name
 
     if yaml_file:
-        # if reading from file, ensure that input file's parent directory is included in image_paths
+        # if reading from file, ensure that input file's parent directory
+        # is included in image_paths
         default_image_path = yaml_file.parent.resolve()
         if not default_image_path in [Path(x).resolve() for x in image_paths]:
             image_paths.append(default_image_path)
@@ -128,7 +129,8 @@ def parse(
             if len(yaml_data[sec]) > 0:  # section has contents
                 if ty == dict:
                     for key, attribs in yaml_data[sec].items():
-                        # The Image dataclass might need to open an image file with a relative path.
+                        # The Image dataclass might need to open
+                        # an image file with a relative path.
                         image = attribs.get("image")
                         if isinstance(image, dict):
                             image_path = image["src"]
@@ -164,12 +166,16 @@ def parse(
                 autogenerated_designators[template] = (
                     autogenerated_designators.get(template, 0) + 1
                 )
-                designator = f"{AUTOGENERATED_PREFIX}{template}_{autogenerated_designators[template]}"
+                designator = (
+                    f"{AUTOGENERATED_PREFIX}"
+                    f"{template}_{autogenerated_designators[template]}"
+                )
             # check if redefining existing component to different template
             if designator in designators_and_templates:
                 if designators_and_templates[designator] != template:
                     raise Exception(
-                        f"Trying to redefine {designator} from {designators_and_templates[designator]} to {template}"
+                        f"Trying to redefine {designator}"
+                        f" from {designators_and_templates[designator]} to {template}"
                     )
             else:
                 designators_and_templates[designator] = template
@@ -201,7 +207,6 @@ def parse(
         expected_type = alternating_types[1 - alternating_types.index(expected_type)]
 
     for connection_set in connection_sets:
-
         # figure out number of parallel connections within this set
         connectioncount = []
         for entry in connection_set:
@@ -282,7 +287,7 @@ def parse(
                     # generate new connector instance from template
                     check_type(designator, template, "connector")
                     harness.add_connector(
-                        name=designator, **template_connectors[template]
+                        designator=designator, **template_connectors[template]
                     )
 
                 elif designator in harness.cables:  # existing cable instance
@@ -290,7 +295,9 @@ def parse(
                 elif template in template_cables.keys():
                     # generate new cable instance from template
                     check_type(designator, template, "cable/arrow")
-                    harness.add_cable(name=designator, **template_cables[template])
+                    harness.add_cable(
+                        designator=designator, **template_cables[template]
+                    )
 
                 elif is_arrow(designator):
                     check_type(designator, template, "cable/arrow")
@@ -300,7 +307,8 @@ def parse(
                         f"{template} is an unknown template/designator/arrow."
                     )
 
-            alternate_type()  # entries in connection set must alternate between connectors and cables/arrows
+            # entries in connection set must alternate between connectors and cables/arrows
+            alternate_type()
 
         # transpose connection set list
         # before: one item per component, one subitem per connection in set
@@ -355,11 +363,13 @@ def parse(
                         # mate two connectors as a whole
                         harness.add_mate_component(from_name, to_name, designator)
 
-    # harness population completed =============================================
-
     if "additional_bom_items" in yaml_data:
         for line in yaml_data["additional_bom_items"]:
-            harness.add_bom_item(line)
+            harness.add_additional_bom_item(line)
+
+    # harness population completed =============================================
+
+    harness.populate_bom()
 
     if output_formats:
         harness.output(filename=output_file, fmt=output_formats, view=False)
@@ -382,23 +392,15 @@ def parse(
         return tuple(returns) if len(returns) != 1 else returns[0]
 
 
-def _get_yaml_data_and_path(inp: Union[str, Path, Dict]) -> (Dict, Path):
+def _get_yaml_data_and_path(inp: Union[str, Path, Dict]) -> Tuple[Dict, Path]:
     # determine whether inp is a file path, a YAML string, or a Dict
     if not isinstance(inp, Dict):  # received a str or a Path
-        try:
+        if isinstance(inp, Path) or (isinstance(inp, str) and not "\n" in inp):
             yaml_path = Path(inp).expanduser().resolve(strict=True)
-            # if no FileNotFoundError exception happens, get file contents
             yaml_str = open_file_read(yaml_path).read()
-        except (FileNotFoundError, OSError) as e:
-            # if inp is a long YAML string, Pathlib will raise OSError: [errno.ENAMETOOLONG]
-            # when trying to expand and resolve it as a path.
-            # Catch this error, but raise any others
-            from errno import ENAMETOOLONG
-            if type(e) is OSError and e.errno != ENAMETOOLONG:
-                raise e
-            # file does not exist; assume inp is a YAML string
-            yaml_str = inp
+        else:
             yaml_path = None
+            yaml_str = inp
         yaml_data = yaml.safe_load(yaml_str)
     else:
         # received a Dict, use as-is
diff --git a/src/wireviz/wv_bom.py b/src/wireviz/wv_bom.py
index 6689d79..01fbac3 100644
--- a/src/wireviz/wv_bom.py
+++ b/src/wireviz/wv_bom.py
@@ -1,266 +1,87 @@
 # -*- coding: utf-8 -*-
 
-from dataclasses import asdict
-from itertools import groupby
-from typing import Any, Dict, List, Optional, Tuple, Union
+from collections import namedtuple
+from dataclasses import dataclass
+from enum import Enum, IntEnum
+from typing import List, Optional, Union
 
-from wireviz.DataClasses import AdditionalComponent, Cable, Color, Connector
-from wireviz.wv_colors import translate_color
-from wireviz.wv_gv_html import html_bgcolor_attr, html_line_breaks
-from wireviz.wv_helper import clean_whitespace
+import tabulate as tabulate_module
 
-BOM_COLUMNS_ALWAYS = ("id", "description", "qty", "unit", "designators")
-BOM_COLUMNS_OPTIONAL = ("pn", "manufacturer", "mpn", "supplier", "spn")
-BOM_COLUMNS_IN_KEY = ("description", "unit") + BOM_COLUMNS_OPTIONAL
+from wireviz.wv_utils import html_line_breaks
 
-HEADER_PN = "P/N"
-HEADER_MPN = "MPN"
-HEADER_SPN = "SPN"
-
-BOMKey = Tuple[str, ...]
-BOMColumn = str  # = Literal[*BOM_COLUMNS_ALWAYS, *BOM_COLUMNS_OPTIONAL]
-BOMEntry = Dict[BOMColumn, Union[str, int, float, List[str], None]]
+BOM_HASH_FIELDS = "description qty_unit amount partnumbers"
 
 
-def optional_fields(part: Union[Connector, Cable, AdditionalComponent]) -> BOMEntry:
-    """Return part field values for the optional BOM columns as a dict."""
-    part = asdict(part)
-    return {field: part.get(field) for field in BOM_COLUMNS_OPTIONAL}
+BomEntry = namedtuple("BomEntry", "category qty designators")
+BomHash = namedtuple("BomHash", BOM_HASH_FIELDS)
+BomHashList = namedtuple("BomHashList", BOM_HASH_FIELDS)
+PartNumberInfo = namedtuple("PartNumberInfo", "pn manufacturer mpn supplier spn")
+
+# TODO: different BOM modes
+# BomMode
+# "normal"  # no bubbles, full PN info in GV node
+# "bubbles"  # = "full" -> maximum info in GV node
+# "hide PN info"
+# "PN crossref" = "PN bubbles" + "hide PN info"
+# "additionally: BOM table in GV graph label (#227)"
+# "title block in GV graph label"
 
 
-def get_additional_component_table(
-    harness: "Harness", component: Union[Connector, Cable]
+BomCategory = IntEnum(  # to enforce ordering in BOM
+    "BomEntry", "CONNECTOR CABLE WIRE ADDITIONAL_INSIDE ADDITIONAL_OUTSIDE"
+)
+QtyMultiplierConnector = Enum(
+    "QtyMultiplierConnector", "PINCOUNT POPULATED CONNECTIONS"
+)
+QtyMultiplierCable = Enum(
+    "QtyMultiplierCable", "WIRECOUNT TERMINATION LENGTH TOTAL_LENGTH"
+)
+
+PART_NUMBER_HEADERS = PartNumberInfo(
+    pn="P/N", manufacturer=None, mpn="MPN", supplier=None, spn="SPN"
+)
+
+
+def partnumbers2list(
+    partnumbers: PartNumberInfo, parent_partnumbers: PartNumberInfo = None
 ) -> List[str]:
-    """Return a list of diagram node table row strings with additional components."""
-    rows = []
-    if component.additional_components:
-        rows.append(["Additional components"])
-        for part in component.additional_components:
-            common_args = {
-                "qty": part.qty * component.get_qty_multiplier(part.qty_multiplier),
-                "unit": part.unit,
-                "bgcolor": part.bgcolor,
-            }
-            if harness.options.mini_bom_mode:
-                id = get_bom_index(
-                    harness.bom(),
-                    bom_entry_key({**asdict(part), "description": part.description}),
-                )
-                rows.append(
-                    component_table_entry(
-                        f"#{id} ({part.type.rstrip()})", **common_args
-                    )
-                )
-            else:
-                rows.append(
-                    component_table_entry(
-                        part.description, **common_args, **optional_fields(part)
-                    )
-                )
-    return rows
+    if parent_partnumbers is None:
+        _is_toplevel = True
+        parent_partnumbers = partnumbers
+    else:
+        _is_toplevel = False
 
+    # Note: != operator used as XOR in the following section (https://stackoverflow.com/a/433161)
 
-def get_additional_component_bom(component: Union[Connector, Cable]) -> List[BOMEntry]:
-    """Return a list of BOM entries with additional components."""
-    bom_entries = []
-    for part in component.additional_components:
-        bom_entries.append(
-            {
-                "description": part.description,
-                "qty": part.qty * component.get_qty_multiplier(part.qty_multiplier),
-                "unit": part.unit,
-                "designators": component.name if component.show_name else None,
-                **optional_fields(part),
-            }
+    if _is_toplevel != isinstance(parent_partnumbers.pn, List):
+        # top level and not a list, or wire level and list
+        cell_pn = pn_info_string(PART_NUMBER_HEADERS.pn, None, partnumbers.pn)
+    else:
+        # top level and list -> do per wire later
+        # wire level and not list -> already done at top level
+        cell_pn = None
+
+    if _is_toplevel != isinstance(parent_partnumbers.mpn, List):
+        # TODO: edge case: different manufacturers, but same MPN?
+        cell_mpn = pn_info_string(
+            PART_NUMBER_HEADERS.mpn, partnumbers.manufacturer, partnumbers.mpn
         )
-    return bom_entries
+    else:
+        cell_mpn = None
 
-
-def bom_entry_key(entry: BOMEntry) -> BOMKey:
-    """Return a tuple of string values from the dict that must be equal to join BOM entries."""
-    if "key" not in entry:
-        entry["key"] = tuple(
-            clean_whitespace(make_str(entry.get(c))) for c in BOM_COLUMNS_IN_KEY
+    if _is_toplevel != isinstance(parent_partnumbers.spn, List):
+        # TODO: edge case: different suppliers, but same SPN?
+        cell_spn = pn_info_string(
+            PART_NUMBER_HEADERS.spn, partnumbers.supplier, partnumbers.spn
         )
-    return entry["key"]
+    else:
+        cell_spn = None
 
-
-def generate_bom(harness: "Harness") -> List[BOMEntry]:
-    """Return a list of BOM entries generated from the harness."""
-    from wireviz.Harness import Harness  # Local import to avoid circular imports
-
-    bom_entries = []
-    # connectors
-    for connector in harness.connectors.values():
-        if not connector.ignore_in_bom:
-            description = (
-                "Connector"
-                + (f", {connector.type}" if connector.type else "")
-                + (f", {connector.subtype}" if connector.subtype else "")
-                + (f", {connector.pincount} pins" if connector.show_pincount else "")
-                + (
-                    f", {translate_color(connector.color, harness.options.color_mode)}"
-                    if connector.color
-                    else ""
-                )
-            )
-            bom_entries.append(
-                {
-                    "description": description,
-                    "designators": connector.name if connector.show_name else None,
-                    **optional_fields(connector),
-                }
-            )
-
-        # add connectors aditional components to bom
-        bom_entries.extend(get_additional_component_bom(connector))
-
-    # cables
-    # TODO: If category can have other non-empty values than 'bundle', maybe it should be part of description?
-    for cable in harness.cables.values():
-        if not cable.ignore_in_bom:
-            if cable.category != "bundle":
-                # process cable as a single entity
-                description = (
-                    "Cable"
-                    + (f", {cable.type}" if cable.type else "")
-                    + (f", {cable.wirecount}")
-                    + (
-                        f" x {cable.gauge} {cable.gauge_unit}"
-                        if cable.gauge
-                        else " wires"
-                    )
-                    + (" shielded" if cable.shield else "")
-                    + (
-                        f", {translate_color(cable.color, harness.options.color_mode)}"
-                        if cable.color
-                        else ""
-                    )
-                )
-                bom_entries.append(
-                    {
-                        "description": description,
-                        "qty": cable.length,
-                        "unit": cable.length_unit,
-                        "designators": cable.name if cable.show_name else None,
-                        **optional_fields(cable),
-                    }
-                )
-            else:
-                # add each wire from the bundle to the bom
-                for index, color in enumerate(cable.colors):
-                    description = (
-                        "Wire"
-                        + (f", {cable.type}" if cable.type else "")
-                        + (f", {cable.gauge} {cable.gauge_unit}" if cable.gauge else "")
-                        + (
-                            f", {translate_color(color, harness.options.color_mode)}"
-                            if color
-                            else ""
-                        )
-                    )
-                    bom_entries.append(
-                        {
-                            "description": description,
-                            "qty": cable.length,
-                            "unit": cable.length_unit,
-                            "designators": cable.name if cable.show_name else None,
-                            **{
-                                k: index_if_list(v, index)
-                                for k, v in optional_fields(cable).items()
-                            },
-                        }
-                    )
-
-        # add cable/bundles aditional components to bom
-        bom_entries.extend(get_additional_component_bom(cable))
-
-    # add harness aditional components to bom directly, as they both are List[BOMEntry]
-    bom_entries.extend(harness.additional_bom_items)
-
-    # remove line breaks if present and cleanup any resulting whitespace issues
-    bom_entries = [
-        {k: clean_whitespace(v) for k, v in entry.items()} for entry in bom_entries
-    ]
-
-    # deduplicate bom
-    bom = []
-    for _, group in groupby(sorted(bom_entries, key=bom_entry_key), key=bom_entry_key):
-        group_entries = list(group)
-        designators = sum(
-            (make_list(entry.get("designators")) for entry in group_entries), []
-        )
-        total_qty = sum(entry.get("qty", 1) for entry in group_entries)
-        bom.append(
-            {
-                **group_entries[0],
-                "qty": round(total_qty, 3),
-                "designators": sorted(set(designators)),
-            }
-        )
-
-    # add an incrementing id to each bom entry
-    return [{**entry, "id": index} for index, entry in enumerate(bom, 1)]
-
-
-def get_bom_index(bom: List[BOMEntry], target: BOMKey) -> int:
-    """Return id of BOM entry or raise exception if not found."""
-    for entry in bom:
-        if bom_entry_key(entry) == target:
-            return entry["id"]
-    raise Exception("Internal error: No BOM entry found matching: " + "|".join(target))
-
-
-def bom_list(bom: List[BOMEntry]) -> List[List[str]]:
-    """Return list of BOM rows as lists of column strings with headings in top row."""
-    keys = list(BOM_COLUMNS_ALWAYS)  # Always include this fixed set of BOM columns.
-    for fieldname in BOM_COLUMNS_OPTIONAL:
-        # Include only those optional BOM columns that are in use.
-        if any(entry.get(fieldname) for entry in bom):
-            keys.append(fieldname)
-    # Custom mapping from internal name to BOM column headers.
-    # Headers not specified here are generated by capitilising the internal name.
-    bom_headings = {
-        "pn": HEADER_PN,
-        "mpn": HEADER_MPN,
-        "spn": HEADER_SPN,
-    }
-    return [
-        [bom_headings.get(k, k.capitalize()) for k in keys]
-    ] + [  # Create header row with key names
-        [make_str(entry.get(k)) for k in keys] for entry in bom
-    ]  # Create string list for each entry row
-
-
-def component_table_entry(
-    type: str,
-    qty: Union[int, float],
-    unit: Optional[str] = None,
-    bgcolor: Optional[Color] = None,
-    pn: Optional[str] = None,
-    manufacturer: Optional[str] = None,
-    mpn: Optional[str] = None,
-    supplier: Optional[str] = None,
-    spn: Optional[str] = None,
-) -> str:
-    """Return a diagram node table row string with an additional component."""
-    part_number_list = [
-        pn_info_string(HEADER_PN, None, pn),
-        pn_info_string(HEADER_MPN, manufacturer, mpn),
-        pn_info_string(HEADER_SPN, supplier, spn),
-    ]
-    output = (
-        f"{qty}"
-        + (f" {unit}" if unit else "")
-        + f" x {type}"
-        + ("
" if any(part_number_list) else "") - + (", ".join([pn for pn in part_number_list if pn])) - ) - # format the above output as left aligned text in a single visible cell - # indent is set to two to match the indent in the generated html table - return f""" - -
{html_line_breaks(output)}
""" + cell_contents = [cell_pn, cell_mpn, cell_spn] + if any(cell_contents): + return [html_line_breaks(cell) for cell in cell_contents] + else: + return None def pn_info_string( @@ -274,16 +95,51 @@ def pn_info_string( return None -def index_if_list(value: Any, index: int) -> Any: - """Return the value indexed if it is a list, or simply the value otherwise.""" - return value[index] if isinstance(value, list) else value +def bom_list(bom): + headers = ( + "# Qty Unit Description Amount Unit Designators " + "P/N Manufacturer MPN Supplier SPN Category".split(" ") + ) + rows = [] + rows.append(headers) + # fill rows + for hash, entry in bom.items(): + cells = [ + entry["id"], + entry["qty"], + hash.qty_unit, + hash.description, + hash.amount.number if hash.amount else None, + hash.amount.unit if hash.amount else None, + ", ".join(sorted(entry["designators"])), + ] + if hash.partnumbers: + cells.extend( + [ + hash.partnumbers.pn, + hash.partnumbers.manufacturer, + hash.partnumbers.mpn, + hash.partnumbers.supplier, + hash.partnumbers.spn, + ] + ) + else: + cells.extend([None, None, None, None, None]) + # cells.extend([f"{entry['category']} ({entry['category'].name})"]) # for debugging + rows.append(cells) + # remove empty columns + transposed = list(map(list, zip(*rows))) + transposed = [ + column + for column in transposed + if any([cell is not None for cell in column[1:]]) + # ^ ignore header cell in check + ] + rows = list(map(list, zip(*transposed))) + return rows -def make_list(value: Any) -> list: - """Return value if a list, empty list if None, or single element list otherwise.""" - return value if isinstance(value, list) else [] if value is None else [value] - - -def make_str(value: Any) -> str: - """Return comma separated elements if a list, empty string if None, or value as a string otherwise.""" - return ", ".join(str(element) for element in make_list(value)) +def print_bom_table(bom): + print() + print(tabulate_module.tabulate(bom_list(bom), headers="firstrow")) + print() diff --git a/src/wireviz/wv_cli.py b/src/wireviz/wv_cli.py index 7315072..7acff8a 100644 --- a/src/wireviz/wv_cli.py +++ b/src/wireviz/wv_cli.py @@ -11,7 +11,7 @@ if __name__ == "__main__": import wireviz.wireviz as wv from wireviz import APP_NAME, __version__ -from wireviz.wv_helper import open_file_read +from wireviz.wv_utils import open_file_read format_codes = { "c": "csv", @@ -23,9 +23,12 @@ format_codes = { "t": "tsv", } -epilog = "The -f or --format option accepts a string containing one or more of the " -epilog += "following characters to specify which file types to output:\n" -epilog += ", ".join([f"{key} ({value.upper()})" for key, value in format_codes.items()]) + +epilog = ( + "The -f or --format option accepts a string containing one or more of the " + "following characters to specify which file types to output:\n" + + f", ".join([f"{key} ({value.upper()})" for key, value in format_codes.items()]) +) @click.command(epilog=epilog, no_args_is_help=True) @@ -58,7 +61,10 @@ epilog += ", ".join([f"{key} ({value.upper()})" for key, value in format_codes.i "--output-name", default=None, type=str, - help="File name (without extension) to use for output files, if different from input file name.", + help=( + "File name (without extension) to use for output files, " + "if different from input file name." + ), ) @click.option( "-V", @@ -71,7 +77,7 @@ def wireviz(file, format, prepend, output_dir, output_name, version): """ Parses the provided FILE and generates the specified outputs. """ - print() + print() # blank line before execution print(f"{APP_NAME} {__version__}") if version: return # print version number only and exit @@ -105,6 +111,8 @@ def wireviz(file, format, prepend, output_dir, output_name, version): prepend_file = Path(prepend_file) if not prepend_file.exists(): raise Exception(f"File does not exist:\n{prepend_file}") + if not prepend_file.is_file(): + raise Exception(f"Path is not a file:\n{prepend_file}") print("Prepend file:", prepend_file) prepend_input += open_file_read(prepend_file).read() + "\n" @@ -116,6 +124,8 @@ def wireviz(file, format, prepend, output_dir, output_name, version): file = Path(file) if not file.exists(): raise Exception(f"File does not exist:\n{file}") + if not file.is_file(): + raise Exception(f"Path is not a file:\n{file}") # file_out = file.with_suffix("") if not output_file else output_file _output_dir = file.parent if not output_dir else output_dir @@ -142,7 +152,7 @@ def wireviz(file, format, prepend, output_dir, output_name, version): image_paths=list(image_paths), ) - print() + print() # blank line after execution if __name__ == "__main__": diff --git a/src/wireviz/wv_colors.py b/src/wireviz/wv_colors.py index 857f307..919ff0d 100644 --- a/src/wireviz/wv_colors.py +++ b/src/wireviz/wv_colors.py @@ -1,6 +1,198 @@ # -*- coding: utf-8 -*- -from typing import Dict, List +from collections import namedtuple +from dataclasses import dataclass, field +from enum import Enum +from typing import List + +padding_amount = 1 + +ColorOutputMode = Enum( + "ColorOutputMode", "EN_LOWER EN_UPPER DE_LOWER DE_UPPER HTML_LOWER HTML_UPPER" +) + +color_output_mode = ColorOutputMode.EN_UPPER + +KnownColor = namedtuple("KnownColor", "html code_de full_en full_de") + +known_colors = { # v--------v--------- for future use + "BK": KnownColor("#000000", "sw", "black", "schwarz"), + "WH": KnownColor("#ffffff", "ws", "white", "weiß"), + "GY": KnownColor("#999999", "gr", "grey", "grau"), + "PK": KnownColor("#ff66cc", "rs", "pink", "rosa"), + "RD": KnownColor("#ff0000", "rt", "red", "rot"), + "OG": KnownColor("#ff8000", "or", "orange", "orange"), + "YE": KnownColor("#ffff00", "ge", "yellow", "gelb"), + "OL": KnownColor("#708000", "ol", "olive green", "olivgrün"), + "GN": KnownColor("#00aa00", "gn", "green", "grün"), + "TQ": KnownColor("#00ffff", "tk", "turquoise", "türkis"), + "LB": KnownColor("#a0dfff", "hb", "light blue", "hellblau"), + "BU": KnownColor("#0066ff", "bl", "blue", "blau"), + "VT": KnownColor("#8000ff", "vi", "violet", "violett"), + "BN": KnownColor("#895956", "br", "brown", "braun"), + "BG": KnownColor("#ceb673", "bg", "beige", "beige"), + "IV": KnownColor("#f5f0d0", "eb", "ivory", "elfenbein"), + "SL": KnownColor("#708090", "si", "slate", "schiefer"), + "CU": KnownColor("#d6775e", "ku", "copper", "Kupfer"), + "SN": KnownColor("#aaaaaa", "vz", "tin", "verzinkt"), + "SR": KnownColor("#84878c", "ag", "silver", "Silber"), + "GD": KnownColor("#ffcf80", "au", "gold", "Gold"), +} + + +def convert_case(inp): + if "_LOWER" in color_output_mode.name: + return inp.lower() + elif "_UPPER" in color_output_mode.name: + return inp.upper() + else: # currently not used + return inp + + +def get_color_by_colorcode_index(color_code: str, index: int) -> str: + num_colors_in_code = len(COLOR_CODES[color_code]) + actual_index = index % num_colors_in_code # wrap around if index is out of bounds + return COLOR_CODES[color_code][actual_index] + + +@dataclass +class SingleColor: + _code_en: str + _html: str + + @property + def code_en(self): + return convert_case(self._code_en) if self._code_en else None + + @property + def code_de(self): + return ( + convert_case(known_colors[self._code_en.upper()].code_de) + if self._code_en + else None + ) + + @property + def html(self): + return convert_case(self._html) if self._code_en else None + + @property + def known(self): + # treat None as a known color + return self.code_en.upper() in known_colors.keys() if self._code_en else True + + def __init__(self, inp): + if inp is None: + self._html = None + self._code_en = None + elif isinstance(inp, int): + hex_str = f"#{inp:06x}" + self._html = hex_str + self._code_en = hex_str # do not perform reverse lookup + elif inp.upper() in known_colors.keys(): + inp_upper = inp.upper() + self._code_en = inp_upper + self._html = known_colors[inp_upper].html + else: # assume it's a valid HTML color name + self._html = inp + self._code_en = inp + + @property + def html_padded(self): + return ":".join([self.html] * padding_amount) + + def __bool__(self): + return self._code_en is not None + + def __str__(self): + if self._html is None: + return "" + elif self.known and "EN_" in color_output_mode.name: + return self.code_en + elif self.known and "DE_" in color_output_mode.name: + return self.code_de + else: + return self.html + + +@dataclass +class MultiColor: + colors: List[SingleColor] = field(default_factory=list) + + def __init__(self, inp): + self.colors = [] + if inp is None: + pass + elif isinstance(inp, List): # input is already a list + for item in inp: + if item is None: + pass + elif isinstance(item, SingleColor): + self.colors.append(item) + else: # string + self.colors.append(SingleColor(item)) + elif isinstance(inp, SingleColor): # single color + self.colors = [inp] + else: # split input into list + if ":" in str(inp): + self.colors = [SingleColor(item) for item in inp.split(":")] + else: + if isinstance(inp, int): + self.colors = [SingleColor(inp)] + elif len(inp) % 2 == 0: + items = [inp[i : i + 2] for i in range(0, len(inp), 2)] + known = [item.upper() in known_colors.keys() for item in items] + if all(known): + self.colors = [SingleColor(item) for item in items] + else: # assume it's a valud HTML color name + self.colors = [SingleColor(inp)] + else: # assume it's a valid HTML color name + self.colors = [SingleColor(inp)] + + def __len__(self): + return len(self.colors) + + def __bool__(self): + return len(self.colors) >= 1 + + def __str__(self): + if "EN_" in color_output_mode.name or "DE_" in color_output_mode.name: + joiner = "" if self.all_known else ":" + elif "HTML_" in color_output_mode.name: + joiner = ":" + else: + joiner = "???" + return joiner.join([str(color) for color in self.colors]) + + @property + def all_known(self): + return all([color.known for color in self.colors]) + + @property + def html(self): + return ":".join([color.html for color in self.colors]) + + @property + def html_padded_list(self): + # padding only properly works for padding_amount 1 or 3 + if padding_amount == 1: + out = [color.html for color in self.colors] + elif len(self) == 0: + out = [] + elif len(self) == 1: + out = [self.colors[0].html for i in range(3)] + elif len(self) == 2: + out = [self.colors[0].html, self.colors[1].html, self.colors[0].html] + elif len(self) == 3: + out = [color.html for color in self.colors] + else: + raise Exception(f"Padding not supported for len {len(self)}") + return [str(color) for color in out] + + @property + def html_padded(self): + return ":".join(self.html_padded_list) + COLOR_CODES = { # fmt: off @@ -38,164 +230,3 @@ COLOR_CODES = { "T568A": ["WHGN", "GN", "WHOG", "BU", "WHBU", "OG", "WHBN", "BN"], "T568B": ["WHOG", "OG", "WHGN", "BU", "WHBU", "GN", "WHBN", "BN"], } - -# Convention: Color names should be 2 letters long, to allow for multicolored wires - -_color_hex = { - "BK": "#000000", - "WH": "#ffffff", - "GY": "#999999", - "PK": "#ff66cc", - "RD": "#ff0000", - "OG": "#ff8000", - "YE": "#ffff00", - "OL": "#708000", # olive green - "GN": "#00ff00", - "TQ": "#00ffff", - "LB": "#a0dfff", # light blue - "BU": "#0066ff", - "VT": "#8000ff", - "BN": "#895956", - "BG": "#ceb673", # beige - "IV": "#f5f0d0", # ivory - "SL": "#708090", - "CU": "#d6775e", # Faux-copper look, for bare CU wire - "SN": "#aaaaaa", # Silvery look for tinned bare wire - "SR": "#84878c", # Darker silver for silvered wire - "GD": "#ffcf80", # Golden color for gold -} - -_color_full = { - "BK": "black", - "WH": "white", - "GY": "grey", - "PK": "pink", - "RD": "red", - "OG": "orange", - "YE": "yellow", - "OL": "olive green", - "GN": "green", - "TQ": "turquoise", - "LB": "light blue", - "BU": "blue", - "VT": "violet", - "BN": "brown", - "BG": "beige", - "IV": "ivory", - "SL": "slate", - "CU": "copper", - "SN": "tin", - "SR": "silver", - "GD": "gold", -} - -_color_ger = { - "BK": "sw", - "WH": "ws", - "GY": "gr", - "PK": "rs", - "RD": "rt", - "OG": "or", - "YE": "ge", - "OL": "ol", # olivgrün - "GN": "gn", - "TQ": "tk", - "LB": "hb", # hellblau - "BU": "bl", - "VT": "vi", - "BN": "br", - "BG": "bg", # beige - "IV": "eb", # elfenbeinfarben - "SL": "si", # Schiefer - "CU": "ku", # Kupfer - "SN": "vz", # verzinkt - "SR": "ag", # Silber - "GD": "au", # Gold -} - - -color_default = "#ffffff" - -_hex_digits = set("0123456789abcdefABCDEF") - - -# Literal type aliases below are commented to avoid requiring python 3.8 -Color = str # Two-letter color name = Literal[_color_hex.keys()] -Colors = str # One or more two-letter color names (Color) concatenated into one string -ColorMode = ( - str # = Literal['full', 'FULL', 'hex', 'HEX', 'short', 'SHORT', 'ger', 'GER'] -) -ColorScheme = str # Color scheme name = Literal[COLOR_CODES.keys()] - - -def get_color_hex(input: Colors, pad: bool = False) -> List[str]: - """Return list of hex colors from either a string of color names or :-separated hex colors.""" - if input is None or input == "": - return [color_default] - elif input[0] == "#": # Hex color(s) - output = input.split(":") - for i, c in enumerate(output): - if c[0] != "#" or not all(d in _hex_digits for d in c[1:]): - if c != input: - c += f" in input: {input}" - print(f"Invalid hex color: {c}") - output[i] = color_default - else: # Color name(s) - - def lookup(c: str) -> str: - try: - return _color_hex[c] - except KeyError: - if c != input: - c += f" in input: {input}" - print(f"Unknown color name: {c}") - return color_default - - output = [lookup(input[i : i + 2]) for i in range(0, len(input), 2)] - - if len(output) == 2: # Give wires with EXACTLY 2 colors that striped look. - output += output[:1] - elif pad and len(output) == 1: # Hacky style fix: Give single color wires - output *= 3 # a triple-up so that wires are the same size. - - return output - - -def get_color_translation(translate: Dict[Color, str], input: Colors) -> List[str]: - """Return list of colors translations from either a string of color names or :-separated hex colors.""" - - def from_hex(hex_input: str) -> str: - for color, hex in _color_hex.items(): - if hex == hex_input: - return translate[color] - return f'({",".join(str(int(hex_input[i:i+2], 16)) for i in range(1, 6, 2))})' - - return ( - [from_hex(h) for h in input.lower().split(":")] - if input[0] == "#" - else [translate.get(input[i : i + 2], "??") for i in range(0, len(input), 2)] - ) - - -def translate_color(input: Colors, color_mode: ColorMode) -> str: - if input == "" or input is None: - return "" - upper = color_mode.isupper() - if not (color_mode.isupper() or color_mode.islower()): - raise Exception("Unknown color mode capitalization") - - color_mode = color_mode.lower() - if color_mode == "full": - output = "/".join(get_color_translation(_color_full, input)) - elif color_mode == "hex": - output = ":".join(get_color_hex(input, pad=False)) - elif color_mode == "ger": - output = "".join(get_color_translation(_color_ger, input)) - elif color_mode == "short": - output = input - else: - raise Exception("Unknown color mode") - if upper: - return output.upper() - else: - return output.lower() diff --git a/src/wireviz/wv_dataclasses.py b/src/wireviz/wv_dataclasses.py new file mode 100644 index 0000000..3e08375 --- /dev/null +++ b/src/wireviz/wv_dataclasses.py @@ -0,0 +1,815 @@ +# -*- coding: utf-8 -*- + +from collections import namedtuple +from dataclasses import dataclass, field +from enum import Enum +from itertools import zip_longest +from typing import Any, Dict, List, Optional, Tuple, Union + +from wireviz.wv_bom import ( + BomHash, + BomHashList, + PartNumberInfo, + QtyMultiplierCable, + QtyMultiplierConnector, +) +from wireviz.wv_colors import ( + COLOR_CODES, + ColorOutputMode, + MultiColor, + SingleColor, + get_color_by_colorcode_index, +) +from wireviz.wv_utils import aspect_ratio, awg_equiv, mm2_equiv, remove_links + +# Each type alias have their legal values described in comments +# - validation might be implemented in the future +PlainText = str # Text not containing HTML tags nor newlines +Hypertext = str # Text possibly including HTML hyperlinks that are removed in all outputs except HTML output +MultilineHypertext = ( + str # Hypertext possibly also including newlines to break lines in diagram output +) + +Designator = PlainText # Case insensitive unique name of connector or cable + +# Literal type aliases below are commented to avoid requiring python 3.8 +ImageScale = PlainText # = Literal['false', 'true', 'width', 'height', 'both'] + +# Type combinations +Pin = Union[int, PlainText] # Pin identifier +PinIndex = int # Zero-based pin index +Wire = Union[int, PlainText] # Wire number or Literal['s'] for shield +NoneOrMorePins = Union[ + Pin, Tuple[Pin, ...], None +] # None, one, or a tuple of pin identifiers +NoneOrMorePinIndices = Union[ + PinIndex, Tuple[PinIndex, ...], None +] # None, one, or a tuple of zero-based pin indices +OneOrMoreWires = Union[Wire, Tuple[Wire, ...]] # One or a tuple of wires + +# Metadata can contain whatever is needed by the HTML generation/template. +MetadataKeys = PlainText # Literal['title', 'description', 'notes', ...] + + +Side = Enum("Side", "LEFT RIGHT") +ArrowDirection = Enum("ArrowDirection", "NONE BACK FORWARD BOTH") +ArrowWeight = Enum("ArrowWeight", "SINGLE DOUBLE") +NumberAndUnit = namedtuple("NumberAndUnit", "number unit") + +AUTOGENERATED_PREFIX = "AUTOGENERATED_" + + +@dataclass +class Arrow: + direction: ArrowDirection + weight: ArrowWeight + + +class Metadata(dict): + pass + + +@dataclass +class Options: + fontname: PlainText = "arial" + bgcolor: SingleColor = "WH" # will be converted to SingleColor in __post_init__ + bgcolor_node: SingleColor = "WH" + bgcolor_connector: SingleColor = None + bgcolor_cable: SingleColor = None + bgcolor_bundle: SingleColor = None + color_output_mode: ColorOutputMode = ColorOutputMode.EN_UPPER + mini_bom_mode: bool = True + template_separator: str = "." + _pad: int = 0 + # TODO: resolve template and image paths during rendering, not during YAML parsing + _template_paths: List = field(default_factory=list) + _image_paths: List = field(default_factory=list) + + def __post_init__(self): + self.bgcolor = SingleColor(self.bgcolor) + self.bgcolor_node = SingleColor(self.bgcolor_node) + self.bgcolor_connector = SingleColor(self.bgcolor_connector) + self.bgcolor_cable = SingleColor(self.bgcolor_cable) + self.bgcolor_bundle = SingleColor(self.bgcolor_bundle) + + if not self.bgcolor_node: + self.bgcolor_node = self.bgcolor + if not self.bgcolor_connector: + self.bgcolor_connector = self.bgcolor_node + if not self.bgcolor_cable: + self.bgcolor_cable = self.bgcolor_node + if not self.bgcolor_bundle: + self.bgcolor_bundle = self.bgcolor_cable + + +@dataclass +class Tweak: + override: Optional[Dict[Designator, Dict[str, Optional[str]]]] = None + append: Union[str, List[str], None] = None + + +@dataclass +class Image: + # Attributes of the image object : + src: str + scale: Optional[ImageScale] = None + # Attributes of the image cell containing the image: + width: Optional[int] = None + height: Optional[int] = None + fixedsize: Optional[bool] = None + bgcolor: SingleColor = None + # Contents of the text cell just below the image cell: + caption: Optional[MultilineHypertext] = None + # See also HTML doc at https://graphviz.org/doc/info/shapes.html#html + + def __post_init__(self): + self.bgcolor = SingleColor(self.bgcolor) + + if self.fixedsize is None: + # Default True if any dimension specified unless self.scale also is specified. + self.fixedsize = (self.width or self.height) and self.scale is None + + if self.scale is None: + if not self.width and not self.height: + self.scale = "false" + elif self.width and self.height: + self.scale = "both" + else: + self.scale = "true" # When only one dimension is specified. + + if self.fixedsize: + # If only one dimension is specified, compute the other + # because Graphviz requires both when fixedsize=True. + if self.height: + if not self.width: + self.width = self.height * aspect_ratio(self.src) + else: + if self.width: + self.height = self.width / aspect_ratio(self.src) + + +@dataclass +class PinClass: + index: int + id: str + label: str + color: MultiColor + parent: str # designator of parent connector + _num_connections = 0 # incremented in Connector.connect() + _anonymous: bool = False # true for pins on autogenerated connectors + _simple: bool = False # true for simple connector + + def __str__(self): + snippets = [ # use str() for each in case they are int or other non-str + str(self.parent) if not self._anonymous else "", + str(self.id) if not self._anonymous and not self._simple else "", + str(self.label) if self.label else "", + ] + return ":".join([snip for snip in snippets if snip != ""]) + + +@dataclass +class Component: + category: Optional[str] = None # currently only used by cables, to define bundles + type: Union[MultilineHypertext, List[MultilineHypertext]] = None + subtype: Union[MultilineHypertext, List[MultilineHypertext]] = None + + # part number + partnumbers: PartNumberInfo = None # filled by fill_partnumbers() + # the following are provided for user convenience and should not be accessed later. + # their contents are loaded into partnumbers during the child class __post_init__() + pn: str = None + manufacturer: str = None + mpn: str = None + supplier: str = None + spn: str = None + # BOM info + qty: NumberAndUnit = NumberAndUnit(1, None) + amount: Optional[NumberAndUnit] = None + sum_amounts_in_bom: bool = True + ignore_in_bom: bool = False + bom_id: Optional[str] = None # to be filled after harness is built + + def fill_partnumbers(self): + partnos = [self.pn, self.manufacturer, self.mpn, self.supplier, self.spn] + partnos = [remove_links(entry) for entry in partnos] + partnos = tuple(partnos) + self.partnumbers = PartNumberInfo(*partnos) + + def parse_number_and_unit( + self, + inp: Optional[Union[NumberAndUnit, float, int, str]], + default_unit: Optional[str] = None, + ) -> Optional[NumberAndUnit]: + if inp is None: + return None + elif isinstance(inp, NumberAndUnit): + return inp + elif isinstance(inp, float) or isinstance(inp, int): + return NumberAndUnit(float(inp), default_unit) + elif isinstance(inp, str): + if " " in inp: + number, unit = inp.split(" ", 1) + else: + number, unit = inp, default_unit + try: + number = float(number) + except ValueError: + raise Exception( + f"{inp} is not a valid number and unit.\n" + "It must be a number, or a number and unit separated by a space." + ) + else: + return NumberAndUnit(number, unit) + + @property + def bom_hash(self) -> BomHash: + if self.sum_amounts_in_bom: + _hash = BomHash( + description=self.description, + qty_unit=self.amount.unit if self.amount else None, + amount=None, + partnumbers=self.partnumbers, + ) + else: + _hash = BomHash( + description=self.description, + qty_unit=self.qty.unit, + amount=self.amount, + partnumbers=self.partnumbers, + ) + return _hash + + @property + def bom_qty(self) -> float: + if self.sum_amounts_in_bom: + if self.amount: + return self.qty.number * self.amount.number + else: + return self.qty.number + else: + return self.qty.number + + def bom_amount(self) -> NumberAndUnit: + if self.sum_amounts_in_bom: + return NumberAndUnit(None, None) + else: + return self.amount + + @property + def has_pn_info(self) -> bool: + return any([self.pn, self.manufacturer, self.mpn, self.supplier, self.spn]) + + +@dataclass +class AdditionalComponent(Component): + qty_multiplier: Union[QtyMultiplierConnector, QtyMultiplierCable, int] = 1 + _qty_multiplier_computed: Union[int, float] = 1 + designators: Optional[str] = None # used for components definedi in the + # additional_bom_items section within another component + bgcolor: SingleColor = None # ^ same here + note: str = None + + def __post_init__(self): + super().fill_partnumbers() + self.bgcolor = SingleColor(self.bgcolor) + self.qty = self.parse_number_and_unit(self.qty, None) + self.amount = self.parse_number_and_unit(self.amount, None) + + if isinstance(self.qty_multiplier, float) or isinstance( + self.qty_multiplier, int + ): + pass + else: + self.qty_multiplier = self.qty_multiplier.upper() + if self.qty_multiplier in QtyMultiplierConnector.__members__.keys(): + self.qty_multiplier = QtyMultiplierConnector[self.qty_multiplier] + elif self.qty_multiplier in QtyMultiplierCable.__members__.keys(): + self.qty_multiplier = QtyMultiplierCable[self.qty_multiplier] + else: + raise Exception(f"Unknown qty multiplier: {self.qty_multiplier}") + + @property + def additional_components(self): + # an additional component may not have further nested additional comonents + return [] + + @property + def bom_qty(self): + return self.qty.number * self._qty_multiplier_computed + + @property + def description(self) -> str: + return f"{self.type}{', ' + self.subtype if self.subtype else ''}" + + +@dataclass +class GraphicalComponent(Component): # abstract class, for future use + bgcolor: Optional[SingleColor] = None + + +@dataclass +class TopLevelGraphicalComponent(GraphicalComponent): # abstract class + # component properties + designator: Designator = None + color: Optional[MultiColor] = None + image: Optional[Image] = None + additional_parameters: Optional[Dict] = None + additional_components: List[AdditionalComponent] = field(default_factory=list) + notes: Optional[MultilineHypertext] = None + # BOM options + add_up_in_bom: Optional[bool] = None + # rendering options + bgcolor_title: Optional[SingleColor] = None + show_name: Optional[bool] = None + + +@dataclass +class Connector(TopLevelGraphicalComponent): + # connector-specific properties + style: Optional[str] = None + category: Optional[str] = None + loops: List[List[Pin]] = field(default_factory=list) + # pin information in particular + pincount: Optional[int] = None + pins: List[Pin] = field(default_factory=list) # legacy + pinlabels: List[Pin] = field(default_factory=list) # legacy + pincolors: List[str] = field(default_factory=list) # legacy + pin_objects: Dict[Any, PinClass] = field(default_factory=dict) # new + # rendering option + show_pincount: Optional[bool] = None + hide_disconnected_pins: bool = False + + @property + def is_autogenerated(self): + return self.designator.startswith(AUTOGENERATED_PREFIX) + + @property + def description(self) -> str: + substrs = [ + "Connector", + self.type, + self.subtype, + f"{self.pincount} pins" if self.show_pincount else None, + str(self.color) if self.color else None, + ] + return ", ".join([str(s) for s in substrs if s is not None and s != ""]) + + def should_show_pin(self, pin_id): + return ( + not self.hide_disconnected_pins + or self.pin_objects[pin_id]._num_connections > 0 + ) + + @property + def unit(self): # for compatibility with BOM hashing + return None # connectors do not support units. + + def __post_init__(self) -> None: + super().fill_partnumbers() + + self.bgcolor = SingleColor(self.bgcolor) + self.bgcolor_title = SingleColor(self.bgcolor_title) + self.color = MultiColor(self.color) + + # connectors do not support custom qty or amount + self.qty = NumberAndUnit(1, None) + self.amount = None + + if isinstance(self.image, dict): + self.image = Image(**self.image) + + self.ports_left = False + self.ports_right = False + self.visible_pins = {} + + if self.style == "simple": + if self.pincount and self.pincount > 1: + raise Exception( + "Connectors with style set to simple may only have one pin" + ) + self.pincount = 1 + + if not self.pincount: + self.pincount = max( + len(self.pins), len(self.pinlabels), len(self.pincolors) + ) + if not self.pincount: + raise Exception( + "You need to specify at least one: " + "pincount, pins, pinlabels, or pincolors" + ) + + # create default list for pins (sequential) if not specified + if not self.pins: + self.pins = list(range(1, self.pincount + 1)) + + if len(self.pins) != len(set(self.pins)): + raise Exception("Pins are not unique") + + # all checks have passed + pin_tuples = zip_longest( + self.pins, + self.pinlabels, + self.pincolors, + ) + for pin_index, (pin_id, pin_label, pin_color) in enumerate(pin_tuples): + self.pin_objects[pin_id] = PinClass( + index=pin_index, + id=pin_id, + label=pin_label, + color=MultiColor(pin_color), + parent=self.designator, + _anonymous=self.is_autogenerated, + _simple=self.style == "simple", + ) + + if self.show_name is None: + self.show_name = self.style != "simple" and not self.is_autogenerated + + if self.show_pincount is None: + # hide pincount for simple (1 pin) connectors by default + self.show_pincount = self.style != "simple" + + for loop in self.loops: + # TODO: allow using pin labels in addition to pin numbers, + # just like when defining regular connections + # TODO: include properties of wire used to create the loop + if len(loop) != 2: + raise Exception("Loops must be between exactly two pins!") + for pin in loop: + if pin not in self.pins: + raise Exception(f'Unknown loop pin "{pin}" for connector "{self.name}"!') + # Make sure loop connected pins are not hidden. + # side=None, determine side to show loops during rendering + self.activate_pin(pin, side=None, is_connection=True) + + for i, item in enumerate(self.additional_components): + if isinstance(item, dict): + self.additional_components[i] = AdditionalComponent(**item) + + def activate_pin(self, pin_id, side: Side = None, is_connection=True) -> None: + if is_connection: + self.pin_objects[pin_id]._num_connections += 1 + if side == Side.LEFT: + self.ports_left = True + elif side == Side.RIGHT: + self.ports_right = True + + def compute_qty_multipliers(self): + # do not run before all connections in harness have been made! + num_populated_pins = len( + [pin for pin in self.pin_objects.values() if pin._num_connections > 0] + ) + num_connections = sum( + [pin._num_connections for pin in self.pin_objects.values()] + ) + qty_multipliers_computed = { + "PINCOUNT": self.pincount, + "POPULATED": num_populated_pins, + "CONNECTIONS": num_connections, + } + for subitem in self.additional_components: + if isinstance(subitem.qty_multiplier, QtyMultiplierConnector): + computed_factor = qty_multipliers_computed[subitem.qty_multiplier.name] + elif isinstance(subitem.qty_multiplier, QtyMultiplierCable): + raise Exception("Used a cable multiplier in a connector!") + else: # int or float + computed_factor = subitem.qty_multiplier + subitem._qty_multiplier_computed = computed_factor + + +@dataclass +class WireClass: + parent: str # designator of parent cable/bundle + # wire-specific properties + index: int + id: str + label: str + color: MultiColor + # ... + bom_id: Optional[str] = None # to be filled after harness is built + # inheritable from parent cable + type: Union[MultilineHypertext, List[MultilineHypertext]] = None + subtype: Union[MultilineHypertext, List[MultilineHypertext]] = None + gauge: Optional[NumberAndUnit] = None + length: Optional[NumberAndUnit] = None + ignore_in_bom: Optional[bool] = False + sum_amounts_in_bom: bool = True + partnumbers: PartNumberInfo = None + + @property + def bom_hash(self) -> BomHash: + if self.sum_amounts_in_bom: + _hash = BomHash( + description=self.description, + qty_unit=self.length.unit if self.length else None, + amount=None, + partnumbers=self.partnumbers, + ) + else: + _hash = BomHash( + description=self.description, + qty_unit=None, + amount=self.length, + partnumbers=self.partnumbers, + ) + return _hash + + @property + def gauge_str(self): + if not self.gauge: + return None + actual_gauge = f"{self.gauge.number} {self.gauge.unit}" + actual_gauge = actual_gauge.replace("mm2", "mm\u00B2") + return actual_gauge + + @property + def description(self) -> str: + substrs = [ + "Wire", + self.type, + self.subtype, + self.gauge_str, + str(self.color) if self.color else None, + ] + desc = ", ".join([s for s in substrs if s is not None and s != ""]) + return desc + + +@dataclass +class ShieldClass(WireClass): + pass # TODO, for wires with multiple shields more shield details, ... + + +@dataclass +class Connection: + from_: PinClass = None + via: Union[WireClass, ShieldClass] = None + to: PinClass = None + + +@dataclass +class Cable(TopLevelGraphicalComponent): + # cable-specific properties + gauge: Optional[NumberAndUnit] = None + length: Optional[NumberAndUnit] = None + color_code: Optional[str] = None + # wire information in particular + wirecount: Optional[int] = None + shield: Union[bool, MultiColor] = False + colors: List[str] = field(default_factory=list) # legacy + wirelabels: List[Wire] = field(default_factory=list) # legacy + wire_objects: Dict[Any, WireClass] = field(default_factory=dict) # new + # internal + _connections: List[Connection] = field(default_factory=list) + # rendering options + show_name: Optional[bool] = None + show_equiv: bool = False + show_wirecount: bool = True + show_wirenumbers: Optional[bool] = None + + @property + def is_autogenerated(self): + return self.designator.startswith(AUTOGENERATED_PREFIX) + + @property + def unit(self): # for compatibility with parent class + return self.length + + @property + def gauge_str(self): + if not self.gauge: + return None + actual_gauge = f"{self.gauge.number} {self.gauge.unit}" + actual_gauge = actual_gauge.replace("mm2", "mm\u00B2") + return actual_gauge + + @property + def gauge_str_with_equiv(self): + if not self.gauge: + return None + actual_gauge = self.gauge_str + equivalent_gauge = "" + if self.show_equiv: + # convert unit if known + if self.gauge.unit == "mm2": + equivalent_gauge = f" ({awg_equiv(self.gauge.number)} AWG)" + elif self.gauge.unit.upper() == "AWG": + equivalent_gauge = f" ({mm2_equiv(self.gauge.number)} mm2)" + out = f"{actual_gauge}{equivalent_gauge}" + out = out.replace("mm2", "mm\u00B2") + return out + + @property + def length_str(self): + if not self.length: + return None + out = f"{self.length.number} {self.length.unit}" + return out + + @property + def bom_hash(self): + if self.category == "bundle": + raise Exception("Do this at the wire level!") # TODO + else: + return super().bom_hash + + @property + def description(self) -> str: + if self.category == "bundle": + raise Exception("Do this at the wire level!") # TODO + else: + substrs = [ + ("", "Cable"), + (", ", self.type), + (", ", self.subtype), + (", ", self.wirecount), + (" ", f"x {self.gauge_str}" if self.gauge else "wires"), + (" ", "shielded" if self.shield else None), + (", ", str(self.color) if self.color else None), + ] + desc = "".join( + [f"{s[0]}{s[1]}" for s in substrs if s[1] is not None and s[1] != ""] + ) + return desc + + def _get_wire_partnumber(self, idx) -> PartNumberInfo: + def _get_correct_element(inp, idx): + return inp[idx] if isinstance(inp, List) else inp + + # TODO: possibly make more robust/elegant + if self.category == "bundle": + return PartNumberInfo( + _get_correct_element(self.partnumbers.pn, idx), + _get_correct_element(self.partnumbers.manufacturer, idx), + _get_correct_element(self.partnumbers.mpn, idx), + _get_correct_element(self.partnumbers.supplier, idx), + _get_correct_element(self.partnumbers.spn, idx), + ) + else: + return None # non-bundles do not support lists of part data + + def __post_init__(self) -> None: + super().fill_partnumbers() + + self.bgcolor = SingleColor(self.bgcolor) + self.bgcolor_title = SingleColor(self.bgcolor_title) + self.color = MultiColor(self.color) + + if isinstance(self.image, dict): + self.image = Image(**self.image) + + # TODO: + # allow gauge, length, and other fields to be lists too (like part numbers), + # and assign them the same way to bundles. + + self.gauge = self.parse_number_and_unit(self.gauge, "mm2") + self.length = self.parse_number_and_unit(self.length, "m") + self.amount = self.length # for BOM + + if self.wirecount: # number of wires explicitly defined + if self.colors: # use custom color palette (partly or looped if needed) + self.colors = [ + self.colors[i % len(self.colors)] for i in range(self.wirecount) + ] + elif self.color_code: + # use standard color palette (partly or looped if needed) + if self.color_code not in COLOR_CODES: + raise Exception("Unknown color code") + self.colors = [ + get_color_by_colorcode_index(self.color_code, i) + for i in range(self.wirecount) + ] + else: # no colors defined, add dummy colors + self.colors = [""] * self.wirecount + + else: # wirecount implicit in length of color list + if not self.colors: + raise Exception( + "Unknown number of wires. " + "Must specify wirecount or colors (implicit length)" + ) + self.wirecount = len(self.colors) + + if self.wirelabels: + if self.shield and "s" in self.wirelabels: + raise Exception( + '"s" may not be used as a wire label for a shielded cable.' + ) + + # if lists of part numbers are provided, + # check this is a bundle and that it matches the wirecount. + for idfield in [self.manufacturer, self.mpn, self.supplier, self.spn, self.pn]: + if isinstance(idfield, list): + if self.category == "bundle": + # check the length + if len(idfield) != self.wirecount: + raise Exception("lists of part data must match wirecount") + else: + raise Exception("lists of part data are only supported for bundles") + + # all checks have passed + wire_tuples = zip_longest( + # TODO: self.wire_ids + self.colors, + self.wirelabels, + ) + for wire_index, (wire_color, wire_label) in enumerate(wire_tuples): + id = wire_index + 1 + self.wire_objects[id] = WireClass( + parent=self.designator, + # wire-specific properties + index=wire_index, # TODO: wire_id + id=id, # TODO: wire_id + label=wire_label, + color=MultiColor(wire_color), + # inheritable from parent cable + type=self.type, + subtype=self.subtype, + gauge=self.gauge, + length=self.length, + sum_amounts_in_bom=self.sum_amounts_in_bom, + ignore_in_bom=self.ignore_in_bom, + partnumbers=self._get_wire_partnumber(wire_index), + ) + + if self.shield: + index_offset = len(self.wire_objects) + # TODO: add support for multiple shields + id = "s" + self.wire_objects[id] = ShieldClass( + index=index_offset, + id=id, + label="Shield", + color=MultiColor(self.shield) + if isinstance(self.shield, str) + else MultiColor(None), + parent=self.designator, + ) + + if self.show_name is None: + self.show_name = not self.is_autogenerated + + if self.show_wirenumbers is None: + # by default, show wire numbers for cables, hide for bundles + self.show_wirenumbers = self.category != "bundle" + + for i, item in enumerate(self.additional_components): + if isinstance(item, dict): + self.additional_components[i] = AdditionalComponent(**item) + + def _connect( + self, + from_pin_obj: List[PinClass], + via_wire_id: str, + to_pin_obj: List[PinClass], + ) -> None: + via_wire_obj = self.wire_objects[via_wire_id] + self._connections.append(Connection(from_pin_obj, via_wire_obj, to_pin_obj)) + + def compute_qty_multipliers(self): + # do not run before all connections in harness have been made! + total_length = sum( + [ + wire.length.number if wire.length else 0 + for wire in self.wire_objects.values() + ] + ) + qty_multipliers_computed = { + "WIRECOUNT": len(self.wire_objects), + "TERMINATIONS": 999, # TODO + "LENGTH": self.length.number if self.length else 0, + "TOTAL_LENGTH": total_length, + } + for subitem in self.additional_components: + if isinstance(subitem.qty_multiplier, QtyMultiplierCable): + computed_factor = qty_multipliers_computed[subitem.qty_multiplier.name] + # inherit component's length unit if appropriate + if subitem.qty_multiplier.name in ["LENGTH", "TOTAL_LENGTH"]: + if subitem.qty.unit is not None: + raise Exception( + f"No unit may be specified when using" + f"{subitem.qty_multiplier} as a multiplier" + ) + subitem.qty = NumberAndUnit(subitem.qty.number, self.length.unit) + + elif isinstance(subitem.qty_multiplier, QtyMultiplierConnector): + raise Exception("Used a connector multiplier in a cable!") + else: # int or float + computed_factor = subitem.qty_multiplier + subitem._qty_multiplier_computed = computed_factor + + +@dataclass +class MatePin: + from_: PinClass + to: PinClass + arrow: Arrow + + +@dataclass +class MateComponent: + from_: str # Designator + to: str # Designator + arrow: Arrow diff --git a/src/wireviz/wv_graphviz.py b/src/wireviz/wv_graphviz.py new file mode 100644 index 0000000..e1c5d03 --- /dev/null +++ b/src/wireviz/wv_graphviz.py @@ -0,0 +1,618 @@ +# -*- coding: utf-8 -*- + +import re +from itertools import zip_longest +from typing import Any, List, Optional, Tuple, Union + +from wireviz import APP_NAME, APP_URL, __version__ +from wireviz.wv_bom import partnumbers2list +from wireviz.wv_colors import MultiColor +from wireviz.wv_dataclasses import ( + ArrowDirection, + ArrowWeight, + Cable, + Component, + Connector, + MateComponent, + MatePin, + Options, + PartNumberInfo, + ShieldClass, + WireClass, +) +from wireviz.wv_html import Img, Table, Td, Tr +from wireviz.wv_utils import html_line_breaks, remove_links + + +def gv_node_component(component: Component) -> Table: + # If no wires connected (except maybe loop wires)? + if isinstance(component, Connector): + if not (component.ports_left or component.ports_right): + component.ports_left = True # Use left side pins by default + + # generate all rows to be shown in the node + if component.show_name: + str_name = f"{remove_links(component.designator)}" + line_name = Td(str_name, bgcolor=component.bgcolor_title.html) + else: + line_name = None + + line_pn = partnumbers2list(component.partnumbers) + + is_simple_connector = ( + isinstance(component, Connector) and component.style == "simple" + ) + + if isinstance(component, Connector): + line_info = [ + bom_bubble(component.bom_id), + html_line_breaks(component.type), + html_line_breaks(component.subtype), + f"{component.pincount}-pin" if component.show_pincount else None, + str(component.color) if component.color else None, + ] + elif isinstance(component, Cable): + line_info = [ + bom_bubble(component.bom_id) if component.category != "bundle" else None, + html_line_breaks(component.type), + f"{component.wirecount}x" if component.show_wirecount else None, + component.gauge_str_with_equiv, + "+ S" if component.shield else None, + component.length_str, + str(component.color) if component.color else None, + ] + + if component.additional_parameters: + line_additional_parameters = nested_table_dict(component.additional_parameters) + else: + line_additional_parameters = [] + + if component.color: + line_info.extend(colorbar_cells(component.color)) + + line_image, line_image_caption = image_and_caption_cells(component) + line_additional_component_table = gv_additional_component_table(component) + line_notes = [Td(html_line_breaks(component.notes), balign="left")] + + if isinstance(component, Connector): + if component.style != "simple": + line_ports = gv_pin_table(component) + else: + line_ports = None + elif isinstance(component, Cable): + line_ports = gv_conductor_table(component) + + lines = [ + line_name, + line_pn, + line_info, + line_additional_parameters, + line_ports, + line_image, + line_image_caption, + line_additional_component_table, + line_notes, + ] + + tbl = nested_table(lines) + if is_simple_connector: + # Simple connectors have no pin table, and therefore, no ports to attach wires to. + # Manually assign left and right ports here if required. + # Use table itself for right port, and the first cell for left port. + # Even if the table only has one cell, two separate ports can still be assigned. + tbl.update_attribs(port="p1r") + first_cell_in_tbl = tbl.contents[0].contents + first_cell_in_tbl.update_attribs(port="p1l") + + return tbl + + +def gv_additional_component_table(component): + if not component.additional_components: + return None + + rows = [] + for subitem in component.additional_components: + firstline = [ + Td(bom_bubble(subitem.bom_id)), + Td(f"{subitem.bom_qty}", align="right"), + Td(f"{subitem.qty.unit if subitem.qty.unit else 'x'}", align="left"), + Td(f"{subitem.description}", align="left"), + Td(f"{subitem.note if subitem.note else ''}", align="left"), + ] + rows.append(Tr(firstline)) + + if subitem.has_pn_info: + secondline = [ + Td("", colspan=3), + Td(f"# TODO PN string", align="left"), # TODO + Td(""), + ] + rows.append(Tr(secondline)) + + return Table(rows, border=1, cellborder=0, cellpadding=3, cellspacing=0) + + +def calculate_node_bgcolor(component, harness_options): + # assign component node bgcolor at the GraphViz node level + # instead of at the HTML table level for better rendering of node outline + if component.bgcolor: + return component.bgcolor.html + elif isinstance(component, Connector) and harness_options.bgcolor_connector: + return harness_options.bgcolor_connector.html + elif ( + isinstance(component, Cable) + and component.category == "bundle" + and harness_options.bgcolor_bundle + ): + return harness_options.bgcolor_bundle.html + elif isinstance(component, Cable) and harness_options.bgcolor_cable: + return harness_options.bgcolor_cable.html + + +def bom_bubble(id) -> Table: + if id is None: + return None + else: + # TODO: activate BOM bubbles + return None + # size and style of BOM bubble is optimized to be a rounded square, + # big enough to hold any two-digit ID without GraphViz warnings + text = id + # text = f'{id}' + return Table( + Tr( + Td( + text, + border=1, + cellpadding=0, + fixedsize="true", + style="rounded", + height=20, + width=20, + # bgcolor="#000000", + ) + ), + border=0, + ) + + +def make_list_of_cells(inp) -> List[Td]: + # inp may be List, + if isinstance(inp, List): + # ensure all list items are Td + list_out = [item if isinstance(item, Td) else Td(item) for item in inp] + return list_out + else: + if inp is None: + return [] + if isinstance(inp, Td): + return [inp] + else: + return [Td(inp)] + + +def nested_table(lines: List[Td]) -> Table: + cell_lists = [make_list_of_cells(line) for line in lines] + rows = [] + + for lst in cell_lists: + if len(lst) == 0: + continue # no cells in list + cells = [item for item in lst if item.contents is not None] + if len(cells) == 0: + continue # no cells in list, or all cells are None + if ( + len(cells) == 1 + and isinstance(cells[0].contents, Table) + and not "!" in cells[0].contents.attribs.get("id", "") + ): + # cell content is already a table, no need to re-wrap it; + # unless explicitly asked to by a "!" in the ID field + # as used by image_and_caption_cells() + inner_table = cells[0].contents + else: + # nest cell content inside a table + inner_table = Table( + Tr(cells), border=0, cellborder=1, cellpadding=3, cellspacing=0 + ) + rows.append(Tr(Td(inner_table))) + + if len(rows) == 0: # create dummy row to avoid GraphViz errors due to empty + inner_table = Table( + Tr(Td("")), border=0, cellborder=1, cellpadding=3, cellspacing=0 + ) + rows = [Tr(Td(inner_table))] + tbl = Table(rows, border=0, cellspacing=0, cellpadding=0) + return tbl + + +def nested_table_dict(d: dict) -> Table: + rows = [] + for k, v in d.items(): + rows.append( + Tr( + [ + Td(k, align="left", balign="left", valign="top"), + Td(html_line_breaks(v), align="left", balign="left"), + ] + ) + ) + return Table(rows, border=0, cellborder=1, cellpadding=3, cellspacing=0) + + +def gv_pin_table(component) -> Table: + pin_rows = [] + for pin in component.pin_objects.values(): + if component.should_show_pin(pin.id): + pin_rows.append(gv_pin_row(pin, component)) + if len(pin_rows) == 0: + # TODO: write test for empty pin tables, and for unconnected connectors that hide disconnected pins + pass + tbl = Table(pin_rows, border=0, cellborder=1, cellpadding=3, cellspacing=0) + return tbl + + +def gv_pin_row(pin, connector) -> Tr: + # ports in GraphViz are 1-indexed for more natural maping to pin/wire numbers + has_pincolors = any([_pin.color for _pin in connector.pin_objects.values()]) + cells = [ + Td(pin.id, port=f"p{pin.index+1}l") if connector.ports_left else None, + Td(pin.label, delete_if_empty=True), + Td(str(pin.color) if pin.color else "", sides="TBL") if has_pincolors else None, + Td(color_minitable(pin.color), sides="TBR") if has_pincolors else None, + Td(pin.id, port=f"p{pin.index+1}r") if connector.ports_right else None, + ] + return Tr(cells) + + +def gv_connector_loops(connector: Connector) -> List: + loop_edges = [] + if connector.ports_left: + loop_side = "l" + loop_dir = "w" + elif connector.ports_right: + loop_side = "r" + loop_dir = "e" + else: + raise Exception("No side for loops") + for loop in connector.loops: + head = f"{connector.designator}:p{loop[0]}{loop_side}:{loop_dir}" + tail = f"{connector.designator}:p{loop[1]}{loop_side}:{loop_dir}" + loop_edges.append((head, tail)) + return loop_edges + + +def gv_conductor_table(cable) -> Table: + rows = [] + rows.append(Tr(Td(" "))) # spacer row on top + + inserted_break_inbetween = False + for wire in cable.wire_objects.values(): + # insert blank space between wires and shields + if isinstance(wire, ShieldClass) and not inserted_break_inbetween: + rows.append(Tr(Td(" "))) # spacer row between wires and shields + inserted_break_inbetween = True + + # row above the wire + wireinfo = [] + if cable.show_wirenumbers and not isinstance(wire, ShieldClass): + wireinfo.append(str(wire.id)) + wireinfo.append(str(wire.color)) + wireinfo.append(wire.label) + + ins, outs = [], [] + for conn in cable._connections: + if conn.via.id == wire.id: + if conn.from_ is not None: + ins.append(str(conn.from_)) + if conn.to is not None: + outs.append(str(conn.to)) + + cells_above = [ + Td(" " + ", ".join(ins), align="left"), + Td(" "), # increase cell spacing here + Td(bom_bubble(wire.bom_id)) if cable.category == "bundle" else None, + Td(":".join([wi for wi in wireinfo if wi is not None and wi != ""])), + Td(" "), # increase cell spacing here + Td(", ".join(outs) + " ", align="right"), + ] + cells_above = [cell for cell in cells_above if cell is not None] + rows.append(Tr(cells_above)) + + # the wire itself + rows.append(Tr(gv_wire_cell(wire, len(cells_above)))) + + # row below the wire + if wire.partnumbers: + cells_below = partnumbers2list( + wire.partnumbers, parent_partnumbers=cable.partnumbers + ) + if cells_below is not None and len(cells_below) > 0: + table_below = ( + Table( + Tr([Td(cell) for cell in cells_below]), + border=0, + cellborder=0, + cellspacing=0, + ), + ) + rows.append(Tr(Td(table_below, colspan=len(cells_above)))) + + rows.append(Tr(Td(" "))) # spacer row on bottom + tbl = Table(rows, border=0, cellborder=0, cellspacing=0) + return tbl + + +def gv_wire_cell(wire: Union[WireClass, ShieldClass], colspan: int) -> Td: + if wire.color: + color_list = ["#000000"] + wire.color.html_padded_list + ["#000000"] + else: + color_list = ["#000000"] + + wire_inner_rows = [] + for j, bgcolor in enumerate(color_list[::-1]): + wire_inner_cell_attribs = { + "bgcolor": bgcolor if bgcolor != "" else "#000000", + "border": 0, + "cellpadding": 0, + "colspan": colspan, + "height": 2, + } + wire_inner_rows.append(Tr(Td("", **wire_inner_cell_attribs))) + wire_inner_table = Table(wire_inner_rows, border=0, cellborder=0, cellspacing=0) + wire_outer_cell_attribs = { + "border": 0, + "cellspacing": 0, + "cellpadding": 0, + "colspan": colspan, + "height": 2 * len(color_list), + "port": f"w{wire.index+1}", + } + # ports in GraphViz are 1-indexed for more natural maping to pin/wire numbers + wire_outer_cell = Td(wire_inner_table, **wire_outer_cell_attribs) + + return wire_outer_cell + + +def gv_edge_wire(harness, cable, connection) -> Tuple[str, str, str, str, str]: + if connection.via.color: + # check if it's an actual wire and not a shield + color = f"#000000:{connection.via.color.html_padded}:#000000" + else: # it's a shield connection + color = "#000000" + + if connection.from_ is not None: # connect to left + from_port_str = ( + f":p{connection.from_.index+1}r" + if harness.connectors[connection.from_.parent].style != "simple" + else "" + ) + code_left_1 = f"{connection.from_.parent}{from_port_str}:e" + code_left_2 = f"{connection.via.parent}:w{connection.via.index+1}:w" + # ports in GraphViz are 1-indexed for more natural maping to pin/wire numbers + else: + code_left_1, code_left_2 = None, None + + if connection.to is not None: # connect to right + to_port_str = ( + f":p{connection.to.index+1}l" + if harness.connectors[connection.to.parent].style != "simple" + else "" + ) + code_right_1 = f"{connection.via.parent}:w{connection.via.index+1}:e" + code_right_2 = f"{connection.to.parent}{to_port_str}:w" + else: + code_right_1, code_right_2 = None, None + + return color, code_left_1, code_left_2, code_right_1, code_right_2 + + +def parse_arrow_str(inp: str) -> ArrowDirection: + if inp[0] == "<" and inp[-1] == ">": + return ArrowDirection.BOTH + elif inp[0] == "<": + return ArrowDirection.BACK + elif inp[-1] == ">": + return ArrowDirection.FORWARD + else: + return ArrowDirection.NONE + + +def gv_edge_mate(mate) -> Tuple[str, str, str, str]: + if mate.arrow.weight == ArrowWeight.SINGLE: + color = "#000000" + elif mate.arrow.weight == ArrowWeight.DOUBLE: + color = "#000000:#000000" + + dir = mate.arrow.direction.name.lower() + + if isinstance(mate, MatePin): + from_pin_index = mate.from_.index + from_port_str = f":p{from_pin_index+1}r" + from_designator = mate.from_.parent + to_pin_index = mate.to.index + to_port_str = f":p{to_pin_index+1}l" + to_designator = mate.to.parent + elif isinstance(mate, MateComponent): + from_designator = mate.from_ + from_port_str = "" + to_designator = mate.to + to_port_str = "" + else: + raise Exception(f"Unknown type of mate:\n{mate}") + + code_from = f"{from_designator}{from_port_str}:e" + code_to = f"{to_designator}{to_port_str}:w" + + return color, dir, code_from, code_to + + +def colorbar_cells(color, mini=False) -> List[Td]: + cells = [] + mini = {"height": 8, "width": 8, "fixedsize": "true"} if mini else {} + for index, subcolor in enumerate(color.colors): + sides_l = "L" if index == 0 else "" + sides_r = "R" if index == len(color.colors) - 1 else "" + sides = "TB" + sides_l + sides_r + cells.append(Td("", bgcolor=subcolor.html, sides=sides, **mini)) + return cells + + +def color_minitable(color: Optional[MultiColor]) -> Union[Table, str]: + if color is None or len(color) == 0: + return "" + + cells = colorbar_cells(color, mini=True) + + return Table( + Tr(cells), + border=0, + cellborder=1, + cellspacing=0, + height=8, + width=8 * len(cells), + fixedsize="true", + ) + + +def image_and_caption_cells(component: Component) -> Tuple[Td, Td]: + if not component.image: + return (None, None) + + image_tag = Img(scale=component.image.scale, src=component.image.src) + image_cell_inner = Td(image_tag, flat=True) + if component.image.fixedsize: + # further nest the image in a table with width/height/fixedsize parameters, + # and place that table in a cell + image_cell_inner.update_attribs(**html_size_attr_dict(component.image)) + image_cell = Td( + Table(Tr(image_cell_inner), border=0, cellborder=0, cellspacing=0, id="!") + ) + else: + image_cell = image_cell_inner + + image_cell.update_attribs( + balign="left", + bgcolor=component.image.bgcolor.html, + sides="TLR" if component.image.caption else None, + ) + + if component.image.caption: + caption_cell = Td( + f"{html_line_breaks(component.image.caption)}", balign="left", sides="BLR" + ) + else: + caption_cell = None + return (image_cell, caption_cell) + + +def html_size_attr_dict(image): + # Return Graphviz HTML attributes to specify minimum or fixed size of a TABLE or TD object + pass + + attr_dict = {} + if image: + if image.width: + attr_dict["width"] = image.width + if image.height: + attr_dict["height"] = image.height + if image.fixedsize: + attr_dict["fixedsize"] = "true" + return attr_dict + + +def set_dot_basics(dot, options): + dot.body.append(f"// Graph generated by {APP_NAME} {__version__}\n") + dot.body.append(f"// {APP_URL}\n") + dot.attr( + "graph", + rankdir="LR", + ranksep="2", + bgcolor=options.bgcolor.html, + nodesep="0.33", + fontname=options.fontname, + ) + dot.attr( + "node", + shape="none", + width="0", + height="0", + margin="0", # Actual size of the node is entirely determined by the label. + style="filled", + fillcolor=options.bgcolor_node.html, + fontname=options.fontname, + ) + dot.attr("edge", style="bold", fontname=options.fontname) + + +def apply_dot_tweaks(dot, tweak): + def typecheck(name: str, value: Any, expect: type) -> None: + if not isinstance(value, expect): + raise Exception( + f"Unexpected value type of {name}: " + f"Expected {expect}, got {type(value)}\n{value}" + ) + + # TODO?: Differ between override attributes and HTML? + if tweak.override is not None: + typecheck("tweak.override", tweak.override, dict) + for k, d in tweak.override.items(): + typecheck(f"tweak.override.{k} key", k, str) + typecheck(f"tweak.override.{k} value", d, dict) + for a, v in d.items(): + typecheck(f"tweak.override.{k}.{a} key", a, str) + typecheck(f"tweak.override.{k}.{a} value", v, (str, type(None))) + + # Override generated attributes of selected entries matching tweak.override. + for i, entry in enumerate(dot.body): + if not isinstance(entry, str): + continue + # Find a possibly quoted keyword after leading TAB(s) and followed by [ ]. + match = re.match(r'^\t*(")?((?(1)[^"]|[^ "])+)(?(1)") \[.*\]$', entry, re.S) + keyword = match and match[2] + if not keyword in tweak.override.keys(): + continue + + for attr, value in tweak.override[keyword].items(): + if value is None: + entry, n_subs = re.subn( + f'( +)?{attr}=("[^"]*"|[^] ]*)(?(1)| *)', "", entry + ) + if n_subs < 1: + print( + "Harness.create_graph() warning: " + f"{attr} not found in {keyword}!" + ) + elif n_subs > 1: + print( + "Harness.create_graph() warning: " + f"{attr} removed {n_subs} times in {keyword}!" + ) + continue + + if len(value) == 0 or " " in value: + value = value.replace('"', r"\"") + value = f'"{value}"' + entry, n_subs = re.subn( + f'{attr}=("[^"]*"|[^] ]*)', f"{attr}={value}", entry + ) + if n_subs < 1: + # If attr not found, then append it + entry = re.sub(r"\]$", f" {attr}={value}]", entry) + elif n_subs > 1: + print( + "Harness.create_graph() warning: " + f"{attr} overridden {n_subs} times in {keyword}!" + ) + + dot.body[i] = entry + + if tweak.append is not None: + if isinstance(tweak.append, list): + for i, element in enumerate(tweak.append, 1): + typecheck(f"tweak.append[{i}]", element, str) + dot.body.extend(tweak.append) + else: + typecheck("tweak.append", tweak.append, str) + dot.body.append(tweak.append) diff --git a/src/wireviz/wv_gv_html.py b/src/wireviz/wv_gv_html.py deleted file mode 100644 index ec80aa7..0000000 --- a/src/wireviz/wv_gv_html.py +++ /dev/null @@ -1,111 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -from typing import List, Optional, Union - -from wireviz.DataClasses import Color -from wireviz.wv_colors import translate_color -from wireviz.wv_helper import remove_links - - -def nested_html_table( - rows: List[Union[str, List[Optional[str]], None]], table_attrs: str = "" -) -> str: - # input: list, each item may be scalar or list - # output: a parent table with one child table per parent item that is list, and one cell per parent item that is scalar - # purpose: create the appearance of one table, where cell widths are independent between rows - # attributes in any leading inside a list are injected into to the preceeding \n" - for item in bom[0]: - th_class = f"bom_col_{item.lower()}" - bom_header_html = f'{bom_header_html} \n' - bom_header_html = f"{bom_header_html} \n" + def update_attribs(self, **kwargs): + for k, v in kwargs.items(): + self.attribs[k] = v - # generate BOM contents - bom_contents = [] - for row in bom[1:]: - row_html = " \n" - for i, item in enumerate(row): - td_class = f"bom_col_{bom[0][i].lower()}" - row_html = f'{row_html} \n' - row_html = f"{row_html} \n" - bom_contents.append(row_html) + @property + def tagname(self): + return type(self).__name__.lower() - bom_html = ( - '
tag - html = [] - html.append( - f'' - ) - - num_rows = 0 - for row in rows: - if isinstance(row, List): - if len(row) > 0 and any(row): - html.append(" ") - num_rows = num_rows + 1 - elif row is not None: - html.append(" ") - num_rows = num_rows + 1 - if num_rows == 0: # empty table - # generate empty cell to avoid GraphViz errors - html.append("") - html.append("
") - # fmt: off - html.append(' ') - # fmt: on - for cell in row: - if cell is not None: - # Inject attributes to the preceeding '.replace(">
tag where needed - # fmt: off - html.append(f' {cell}
") - html.append("
") - html.append(f" {row}") - html.append("
") - return html - - -def html_bgcolor_attr(color: Color) -> str: - """Return attributes for bgcolor or '' if no color.""" - return f' bgcolor="{translate_color(color, "HEX")}"' if color else "" - - -def html_bgcolor(color: Color, _extra_attr: str = "") -> str: - """Return
attributes prefix for bgcolor or '' if no color.""" - return f"" if color else "" - - -def html_colorbar(color: Color) -> str: - """Return attributes prefix for bgcolor and minimum width or None if no color.""" - return html_bgcolor(color, ' width="4"') if color else None - - -def html_image(image): - from wireviz.DataClasses import Image - - if not image: - return None - # The leading attributes belong to the preceeding tag. See where used below. - html = f'{html_size_attr(image)}>' - if image.fixedsize: - # Close the preceeding tag and enclose the image cell in a table without - # borders to avoid narrow borders when the fixed width < the node width. - html = f"""> - - -
- """ - return f"""{html_line_breaks(image.caption)}' - if image and image.caption - else None - ) - - -def html_size_attr(image): - from wireviz.DataClasses import Image - - # Return Graphviz HTML attributes to specify minimum or fixed size of a TABLE or TD object - return ( - ( - (f' width="{image.width}"' if image.width else "") - + (f' height="{image.height}"' if image.height else "") - + (' fixedsize="true"' if image.fixedsize else "") - ) - if image - else "" - ) - - -def html_line_breaks(inp): - return remove_links(inp).replace("\n", "
") if isinstance(inp, str) else inp diff --git a/src/wireviz/wv_harness.py b/src/wireviz/wv_harness.py new file mode 100644 index 0000000..bda2891 --- /dev/null +++ b/src/wireviz/wv_harness.py @@ -0,0 +1,431 @@ +# -*- coding: utf-8 -*- + +from collections import defaultdict +from dataclasses import dataclass, field +from pathlib import Path +from typing import List, Union + +from graphviz import Graph + +import wireviz.wv_colors +from wireviz.wv_bom import BomCategory, BomEntry, bom_list, print_bom_table +from wireviz.wv_dataclasses import ( + AUTOGENERATED_PREFIX, + AdditionalComponent, + Arrow, + ArrowWeight, + Cable, + Component, + Connector, + MateComponent, + MatePin, + Metadata, + Options, + Side, + TopLevelGraphicalComponent, + Tweak, +) +from wireviz.wv_graphviz import ( + apply_dot_tweaks, + calculate_node_bgcolor, + gv_connector_loops, + gv_edge_mate, + gv_edge_wire, + gv_node_component, + parse_arrow_str, + set_dot_basics, +) +from wireviz.wv_output import ( + embed_svg_images, + embed_svg_images_file, + generate_html_output, +) +from wireviz.wv_utils import bom2tsv, open_file_write + + +@dataclass +class Harness: + metadata: Metadata + options: Options + tweak: Tweak + additional_bom_items: List[AdditionalComponent] = field(default_factory=list) + + def __post_init__(self): + self.connectors = {} + self.cables = {} + self.mates = [] + self.bom = defaultdict(dict) + self.additional_bom_items = [] + + def add_connector(self, designator: str, *args, **kwargs) -> None: + conn = Connector(designator=designator, *args, **kwargs) + self.connectors[designator] = conn + + def add_cable(self, designator: str, *args, **kwargs) -> None: + cbl = Cable(designator=designator, *args, **kwargs) + self.cables[designator] = cbl + + def add_additional_bom_item(self, item: dict) -> None: + new_item = AdditionalComponent(**item) + self.additional_bom_items.append(new_item) + + def add_mate_pin(self, from_name, from_pin, to_name, to_pin, arrow_str) -> None: + from_con = self.connectors[from_name] + from_pin_obj = from_con.pin_objects[from_pin] + to_con = self.connectors[to_name] + to_pin_obj = to_con.pin_objects[to_pin] + arrow = Arrow(direction=parse_arrow_str(arrow_str), weight=ArrowWeight.SINGLE) + + self.mates.append(MatePin(from_pin_obj, to_pin_obj, arrow)) + self.connectors[from_name].activate_pin( + from_pin, Side.RIGHT, is_connection=False + ) + self.connectors[to_name].activate_pin(to_pin, Side.LEFT, is_connection=False) + + def add_mate_component(self, from_name, to_name, arrow_str) -> None: + arrow = Arrow(direction=parse_arrow_str(arrow_str), weight=ArrowWeight.SINGLE) + self.mates.append(MateComponent(from_name, to_name, arrow)) + + def populate_bom(self): + # helper lists + all_toplevel_items = ( + list(self.connectors.values()) + + list(self.cables.values()) + + self.additional_bom_items + ) + all_subitems = [ + subitem + for item in all_toplevel_items + for subitem in item.additional_components + ] + all_bom_relevant_items = ( + list(self.connectors.values()) + + [cable for cable in self.cables.values() if cable.category != "bundle"] + + [ + wire + for cable in self.cables.values() + if cable.category == "bundle" + for wire in cable.wire_objects.values() + ] + + all_subitems + ) + + # add items to BOM + for item in all_toplevel_items: + self._add_to_internal_bom(item) # nested subitems are also handled + # sort BOM by category first, then alphabetically by description within category + self.bom = dict( + sorted( + self.bom.items(), + key=lambda x: ( + x[1]["category"], + x[0].description, + ), # x[0] = key, x[1] = value + ) + ) + # assign BOM IDs + for id, key in enumerate(self.bom.keys(), 1): + self.bom[key]["id"] = id + # set BOM IDs within components (for BOM bubbles) + for item in all_bom_relevant_items: + if item.ignore_in_bom: + continue + if not item.bom_hash in self.bom: + print(f"{item}'s hash' not found in BOM dict.") + continue + item.bom_id = self.bom[item.bom_hash]["id"] + + # print_bom_table(self.bom) # for debugging + + def _add_to_internal_bom(self, item: Component): + if item.ignore_in_bom: + return + + def _add(hash, qty, designator=None, category=None): + bom_entry = self.bom[hash] + # initialize missing fields + if not "qty" in bom_entry: + bom_entry["qty"] = 0 + if not "designators" in bom_entry: + bom_entry["designators"] = set() + # update fields + bom_entry["qty"] += qty + if designator is None: + designator_list = [] + elif isinstance(designator, list): + designator_list = designator + else: + designator_list = [designator] + for des in designator_list: + if des and not des.startswith(AUTOGENERATED_PREFIX): + bom_entry["designators"].add(des) + bom_entry["category"] = category + + if isinstance(item, TopLevelGraphicalComponent): + if isinstance(item, Connector): + cat = BomCategory.CONNECTOR + elif isinstance(item, Cable): + if item.category == "bundle": + cat = BomCategory.WIRE + else: + cat = BomCategory.CABLE + else: + cat = "" + + if item.category == "bundle": + for subitem in item.wire_objects.values(): + _add( + hash=subitem.bom_hash, + qty=item.bom_qty, # should be 1 + designator=item.designator, # inherit from parent item + category=cat, + ) + else: + _add( + hash=item.bom_hash, + qty=item.bom_qty, + designator=item.designator, + category=cat, + ) + if item.additional_components: + if item.category == "bundle": + pass # TODO + item.compute_qty_multipliers() + for comp in item.additional_components: + if comp.ignore_in_bom: + continue + _add( + hash=comp.bom_hash, + designator=item.designator, + qty=comp.bom_qty, + category=BomCategory.ADDITIONAL_INSIDE, + ) + elif isinstance(item, AdditionalComponent): + cat = BomCategory.ADDITIONAL_OUTSIDE + _add( + hash=item.bom_hash, + qty=item.bom_qty, + designator=None, + category=cat, + ) + else: + raise Exception(f"Unknown type of item:\n{item}") + + def connect( + self, + from_name: str, + from_pin: Union[int, str], + via_name: str, + via_wire: Union[int, str], + to_name: str, + to_pin: Union[int, str], + ) -> None: + # check from and to connectors + for name, pin in zip([from_name, to_name], [from_pin, to_pin]): + if name is not None and name in self.connectors: + connector = self.connectors[name] + # check if provided name is ambiguous + if pin in connector.pins and pin in connector.pinlabels: + if connector.pins.index(pin) != connector.pinlabels.index(pin): + raise Exception( + f"{name}:{pin} is defined both in pinlabels and pins, " + "for different pins." + ) + # TODO: Maybe issue a warning if present in both lists + # but referencing the same pin? + if pin in connector.pinlabels: + if connector.pinlabels.count(pin) > 1: + raise Exception(f"{name}:{pin} is defined more than once.") + index = connector.pinlabels.index(pin) + pin = connector.pins[index] # map pin name to pin number + if name == from_name: + from_pin = pin + if name == to_name: + to_pin = pin + if not pin in connector.pins: + raise Exception(f"{name}:{pin} not found.") + + # check via cable + if via_name in self.cables: + cable = self.cables[via_name] + # check if provided name is ambiguous + if via_wire in cable.colors and via_wire in cable.wirelabels: + if cable.colors.index(via_wire) != cable.wirelabels.index(via_wire): + raise Exception( + f"{via_name}:{via_wire} is defined both in colors and wirelabels, " + "for different wires." + ) + # TODO: Maybe issue a warning if present in both lists + # but referencing the same wire? + if via_wire in cable.colors: + if cable.colors.count(via_wire) > 1: + raise Exception( + f"{via_name}:{via_wire} is used for more than one wire." + ) + # list index starts at 0, wire IDs start at 1 + via_wire = cable.colors.index(via_wire) + 1 + elif via_wire in cable.wirelabels: + if cable.wirelabels.count(via_wire) > 1: + raise Exception( + f"{via_name}:{via_wire} is used for more than one wire." + ) + via_wire = ( + cable.wirelabels.index(via_wire) + 1 + ) # list index starts at 0, wire IDs start at 1 + + # perform the actual connection + if from_name is not None: + from_con = self.connectors[from_name] + from_pin_obj = from_con.pin_objects[from_pin] + else: + from_pin_obj = None + if to_name is not None: + to_con = self.connectors[to_name] + to_pin_obj = to_con.pin_objects[to_pin] + else: + to_pin_obj = None + + self.cables[via_name]._connect(from_pin_obj, via_wire, to_pin_obj) + if from_name in self.connectors: + self.connectors[from_name].activate_pin(from_pin, Side.RIGHT) + if to_name in self.connectors: + self.connectors[to_name].activate_pin(to_pin, Side.LEFT) + + def create_graph(self) -> Graph: + dot = Graph() + set_dot_basics(dot, self.options) + + for connector in self.connectors.values(): + # generate connector node + gv_html = gv_node_component(connector) + gv_html.update_attribs( + bgcolor=calculate_node_bgcolor(connector, self.options) + ) + dot.node( + connector.designator, + label=f"<\n{gv_html}\n>", + shape="box", + style="filled", + ) + # generate edges for connector loops + if len(connector.loops) > 0: + dot.attr("edge", color="#000000") + loops = gv_connector_loops(connector) + for head, tail in loops: + dot.edge(head, tail) + + # determine if there are double- or triple-colored wires in the harness; + # if so, pad single-color wires to make all wires of equal thickness + wire_is_multicolor = [ + len(wire.color) > 1 + for cable in self.cables.values() + for wire in cable.wire_objects.values() + ] + if any(wire_is_multicolor): + wireviz.wv_colors.padding_amount = 3 + else: + wireviz.wv_colors.padding_amount = 1 + + for cable in self.cables.values(): + # generate cable node + # TODO: PN info for bundles (per wire) + gv_html = gv_node_component(cable) + gv_html.update_attribs(bgcolor=calculate_node_bgcolor(cable, self.options)) + style = "filled,dashed" if cable.category == "bundle" else "filled" + dot.node( + cable.designator, + label=f"<\n{gv_html}\n>", + shape="box", + style=style, + ) + + # generate wire edges between component nodes and cable nodes + for connection in cable._connections: + color, l1, l2, r1, r2 = gv_edge_wire(self, cable, connection) + dot.attr("edge", color=color) + if not (l1, l2) == (None, None): + dot.edge(l1, l2) + if not (r1, r2) == (None, None): + dot.edge(r1, r2) + + for mate in self.mates: + color, dir, code_from, code_to = gv_edge_mate(mate) + + dot.attr("edge", color=color, style="dashed", dir=dir) + dot.edge(code_from, code_to) + + apply_dot_tweaks(dot, self.tweak) + + return dot + + # cache for the GraphViz Graph object + # do not access directly, use self.graph instead + _graph = None + + @property + def graph(self): + if not self._graph: # no cached graph exists, generate one + self._graph = self.create_graph() + return self._graph # return cached graph + + @property + def png(self): + from io import BytesIO + + graph = self.graph + data = BytesIO() + data.write(graph.pipe(format="png")) + data.seek(0) + return data.read() + + @property + def svg(self): + graph = self.graph + return embed_svg_images(graph.pipe(format="svg").decode("utf-8"), Path.cwd()) + + def output( + self, + filename: Union[str, Path], + view: bool = False, + cleanup: bool = True, + fmt: tuple = ("html", "png", "svg", "tsv"), + ) -> None: + # graphical output + graph = self.graph + for f in fmt: + if f in ("png", "svg", "html"): + if f == "html": # if HTML format is specified, + f = "svg" # generate SVG for embedding into HTML + # SVG file will be renamed/deleted later + _filename = f"{filename}.tmp" if f == "svg" else filename + # TODO: prevent rendering SVG twice when both SVG and HTML are specified + graph.format = f + graph.render(filename=_filename, view=view, cleanup=cleanup) + # embed images into SVG output + if "svg" in fmt or "html" in fmt: + embed_svg_images_file(f"{filename}.tmp.svg") + # GraphViz output + if "gv" in fmt: + graph.save(filename=f"{filename}.gv") + # BOM output + bomlist = bom_list(self.bom) + # bomlist = [[]] + if "tsv" in fmt: + tsv = bom2tsv(bomlist) + open_file_write(f"{filename}.tsv").write(tsv) + if "csv" in fmt: + # TODO: implement CSV output (preferrably using CSV library) + print("CSV output is not yet supported") + # HTML output + if "html" in fmt: + generate_html_output(filename, bomlist, self.metadata, self.options) + # PDF output + if "pdf" in fmt: + # TODO: implement PDF output + print("PDF output is not yet supported") + # delete SVG if not needed + if "html" in fmt and not "svg" in fmt: + # SVG file was just needed to generate HTML + Path(f"{filename}.tmp.svg").unlink() + elif "svg" in fmt: + Path(f"{filename}.tmp.svg").replace(f"{filename}.svg") diff --git a/src/wireviz/wv_html.py b/src/wireviz/wv_html.py index 1534266..1c4b750 100644 --- a/src/wireviz/wv_html.py +++ b/src/wireviz/wv_html.py @@ -1,119 +1,125 @@ # -*- coding: utf-8 -*- -import re -from pathlib import Path -from typing import Dict, List, Union +from collections.abc import Iterable +from dataclasses import dataclass, field +from typing import Dict -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, - open_file_read, - open_file_write, - smart_file_resolve, -) +indent_count = 1 -def generate_html_output( - filename: Union[str, Path], - bom_list: List[List[str]], - metadata: Metadata, - options: Options, -): +class Attribs(Dict): + def __repr__(self): + if len(self) == 0: + return "" - # load HTML template - templatename = metadata.get("template", {}).get("name") - if templatename: - # if relative path to template was provided, check directory of YAML file first, fall back to built-in template directory - templatefile = smart_file_resolve( - f"{templatename}.html", - [Path(filename).parent, Path(__file__).parent / "templates"], - ) - else: - # fall back to built-in simple template if no template was provided - templatefile = Path(__file__).parent / "templates/simple.html" + html = [] + for k, v in self.items(): + if v is not None: + html.append(f' {k}="{v}"') + # else: + # html.append(f" {k}") + return "".join(html) - html = open_file_read(templatefile).read() - # embed SVG diagram - with open_file_read(f"{filename}.tmp.svg") as file: - svgdata = re.sub( - "^<[?]xml [^?>]*[?]>[^<]*]*>", - "", - file.read(), - 1, - ) +@dataclass +class Tag: + contents = None + attribs: Attribs = field(default_factory=Attribs) + flat: bool = None + delete_if_empty: bool = False - # generate BOM table - bom = flatten2d(bom_list) + def __init__(self, contents, flat=None, delete_if_empty=False, **kwargs): + self.contents = contents + self.flat = flat + self.delete_if_empty = delete_if_empty + self.attribs = Attribs({**kwargs}) - # generate BOM header (may be at the top or bottom of the table) - bom_header_html = "
{item}
{item}
\n' + bom_header_html + "".join(bom_contents) + "
\n" - ) - bom_html_reversed = ( - '\n' - + "".join(list(reversed(bom_contents))) - + bom_header_html - + "
\n" - ) + @property + def auto_flat(self): + if self.flat is not None: # user specified + return self.flat + if not _is_iterable_not_str(self.contents): # catch str, int, float, ... + if not isinstance(self.contents, Tag): # avoid recursion + return not "\n" in str(self.contents) # flatten if single line - # prepare simple replacements - replacements = { - "": f"{APP_NAME} {__version__} - {APP_URL}", - "": options.fontname, - "": wv_colors.translate_color(options.bgcolor, "hex"), - "": svgdata, - "": bom_html, - "": bom_html_reversed, - "": "1", # TODO: handle multi-page documents - "": "1", # TODO: handle multi-page documents - } + @property + def is_empty(self): + return self.get_contents(force_flat=True) == "" - # prepare metadata replacements - if metadata: - for item, contents in metadata.items(): - if isinstance(contents, (str, int, float)): - replacements[f""] = html_line_breaks(str(contents)) - elif isinstance(contents, Dict): # useful for authors, revisions - for index, (category, entry) in enumerate(contents.items()): - if isinstance(entry, Dict): - replacements[f""] = str(category) - for entry_key, entry_value in entry.items(): - replacements[ - f"" - ] = html_line_breaks(str(entry_value)) + def indent_lines(self, lines, force_flat=False): + if self.auto_flat or force_flat: + return lines + else: + indenter = " " * indent_count + return "\n".join(f"{indenter}{line}" for line in lines.split("\n")) - replacements['"sheetsize_default"'] = '"{}"'.format( - metadata.get("template", {}).get("sheetsize", "") - ) - # include quotes so no replacement happens within