diff --git a/src/wireviz/DataClasses.py b/src/wireviz/DataClasses.py index 87f9a6b..6da26b6 100644 --- a/src/wireviz/DataClasses.py +++ b/src/wireviz/DataClasses.py @@ -42,11 +42,15 @@ class Look: fontname: Optional[PlainText] = None fontsize: Optional[Points] = None + def lookdict(self) -> dict: + """Return Look attributes as dict.""" + return {k:v for k,v in asdict(self).items() if k in asdict(DEFAULT_LOOK).keys()} + def _2dict(self) -> dict: """Return dict of non-None strings with color values translated to hex.""" return { k:translate_color(v, "hex") if 'color' in k else str(v) - for k,v in asdict(self).items() if v is not None + for k,v in self.lookdict().items() if v is not None } def graph_args(self) -> dict: @@ -78,8 +82,7 @@ DEFAULT_LOOK = Look( @dataclass -class Options: - base: Look = field(default_factory=dict) +class Options(Look): node: Look = field(default_factory=dict) connector: Look = field(default_factory=dict) cable: Look = field(default_factory=dict) @@ -89,8 +92,7 @@ class Options: def __post_init__(self): # Build initialization dicts with default values followed by dict entries from YAML input. - self.base = Look(**{**asdict(DEFAULT_LOOK), **self.base}) - self.node = Look(**{**asdict(self.base), **self.node}) + self.node = Look(**{**self.lookdict(), **self.node}) self.connector = Look(**{**asdict(self.node), **self.connector}) self.cable = Look(**{**asdict(self.node), **self.cable}) self.bundle = Look(**{**asdict(self.cable), **self.bundle}) diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index 9002dd9..4812986 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -98,15 +98,15 @@ class Harness: dot.attr('graph', rankdir='LR', ranksep='2', nodesep='0.33', - **self.options.base.graph_args()) + **self.options.graph_args()) dot.attr('node', shape='none', style='filled', width='0', height='0', margin='0', # Actual size of the node is entirely determined by the label. **self.options.node.node_args()) dot.attr('edge', style='bold', - **self.options.base.node_args()) + **self.options.node_args()) - wire_border_hex = wv_colors.get_color_hex(self.options.base.bordercolor)[0] + wire_border_hex = wv_colors.get_color_hex(self.options.bordercolor)[0] # prepare ports on connectors depending on which side they will connect for _, cable in self.cables.items(): diff --git a/src/wireviz/wireviz.py b/src/wireviz/wireviz.py index 9567494..2716169 100755 --- a/src/wireviz/wireviz.py +++ b/src/wireviz/wireviz.py @@ -2,6 +2,7 @@ # -*- coding: utf-8 -*- import argparse +from dataclasses import asdict import os from pathlib import Path import sys @@ -13,7 +14,7 @@ if __name__ == '__main__': sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..')) from wireviz import __version__ -from wireviz.DataClasses import Metadata, Options, Tweak +from wireviz.DataClasses import DEFAULT_LOOK, Metadata, Options, Tweak from wireviz.Harness import Harness from wireviz.wv_helper import expand, open_file_read @@ -37,7 +38,7 @@ def parse(yaml_input: str, file_out: (str, Path) = None, return_types: (None, st harness = Harness( metadata = Metadata(**yaml_data.get('metadata', {})), - options = Options(**yaml_data.get('options', {})), + options = Options(**asdict(DEFAULT_LOOK), **yaml_data.get('options', {})), tweak = Tweak(**yaml_data.get('tweak', {})), ) if 'title' not in harness.metadata: diff --git a/src/wireviz/wv_html.py b/src/wireviz/wv_html.py index 287e613..d05ccfa 100644 --- a/src/wireviz/wv_html.py +++ b/src/wireviz/wv_html.py @@ -15,7 +15,7 @@ def generate_html_output(filename: Union[str, Path], bom_list: List[List[str]], file.write(' \n') file.write(f' \n') file.write(f'