From c6ebcbaf276d4c5d0239624bd8e00340cd5c8f3d Mon Sep 17 00:00:00 2001 From: KV Date: Sun, 30 Jun 2024 16:01:21 +0200 Subject: [PATCH] Add options.terminology to override certain terms These terms can optionally be overrided by user defined terms: pin, wire, shield --- src/wireviz/DataClasses.py | 16 +++++++++++++++- src/wireviz/Harness.py | 5 +++-- src/wireviz/wv_bom.py | 6 +++--- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/wireviz/DataClasses.py b/src/wireviz/DataClasses.py index 5b4bb068..b31897d7 100644 --- a/src/wireviz/DataClasses.py +++ b/src/wireviz/DataClasses.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -from dataclasses import InitVar, dataclass, field +from dataclasses import InitVar, asdict, dataclass, field, replace from enum import Enum, auto from pathlib import Path from typing import Dict, List, Optional, Tuple, Union @@ -47,6 +47,18 @@ class Metadata(dict): pass +@dataclass +class Terminology: + """Terms that the user might want to override""" + pin: Optional[PlainText] = None + wire: Optional[PlainText] = None + shield: Optional[PlainText] = None + + def fully_populated(self): + """Return a copy where empty field values are replaced with their names""" + return replace(self, **{k: v or k for k,v in asdict(self).items()}) + + @dataclass class Options: fontname: PlainText = "arial" @@ -58,6 +70,7 @@ class Options: color_mode: ColorMode = "SHORT" mini_bom_mode: bool = True template_separator: str = "." + terminology: Optional[Terminology] = None def __post_init__(self): if not self.bgcolor_node: @@ -68,6 +81,7 @@ def __post_init__(self): self.bgcolor_cable = self.bgcolor_node if not self.bgcolor_bundle: self.bgcolor_bundle = self.bgcolor_cable + self.terminology = Terminology(**(self.terminology or {})) @dataclass diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index 30468a6a..a5333e4b 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -77,6 +77,7 @@ def __post_init__(self): self.mates = [] self._bom = [] # Internal Cache for generated bom self.additional_bom_items = [] + self.terminology = self.options.terminology.fully_populated() def add_connector(self, name: str, *args, **kwargs) -> None: check_old(f"Connector '{name}'", OLD_CONNECTOR_ATTR, kwargs) @@ -200,7 +201,7 @@ def create_graph(self) -> Graph: 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, + f'{connector.pincount}-{self.terminology.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, @@ -419,7 +420,7 @@ def create_graph(self) -> Graph: wirehtml.append("  ") # spacer wirehtml.append(" ") wirehtml.append(" ") - wirehtml.append(" Shield") + wirehtml.append(f" {self.terminology.shield.title()}") wirehtml.append(" ") wirehtml.append(" ") if isinstance(cable.shield, str): diff --git a/src/wireviz/wv_bom.py b/src/wireviz/wv_bom.py index 27ee59b0..cc58f421 100644 --- a/src/wireviz/wv_bom.py +++ b/src/wireviz/wv_bom.py @@ -107,7 +107,7 @@ def generate_bom(harness: "Harness") -> List[BOMEntry]: "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", {connector.pincount} {harness.terminology.pin}s" if connector.show_pincount else "") + ( f", {translate_color(connector.color, harness.options.color_mode)}" if connector.color @@ -140,7 +140,7 @@ def generate_bom(harness: "Harness") -> List[BOMEntry]: if cable.gauge else " wires" ) - + (" shielded" if cable.shield else "") + + (f" {harness.terminology.shield}ed" if cable.shield else "") + ( f", {translate_color(cable.color, harness.options.color_mode)}" if cable.color @@ -160,7 +160,7 @@ def generate_bom(harness: "Harness") -> List[BOMEntry]: # add each wire from the bundle to the bom for index, color in enumerate(cable.colors): description = ( - "Wire" + harness.terminology.wire.title() + (f", {cable.type}" if cable.type else "") + (f", {cable.gauge} {cable.gauge_unit}" if cable.gauge else "") + (