diff --git a/src/wireviz/DataClasses.py b/src/wireviz/DataClasses.py index d14e445..778ee28 100644 --- a/src/wireviz/DataClasses.py +++ b/src/wireviz/DataClasses.py @@ -113,6 +113,21 @@ class Image: if self.width: self.height = self.width / aspect_ratio(self.src) + @classmethod + def create(cls, input: Union[None, dict, str, List[Union[dict, str]]]): + """Create class instance(s) from alternative YAML input types""" + if input in (None, "", []): + return None + if isinstance(input, list): + return [cls.create(entry) for entry in input] + if isinstance(input, str): + input = {"src": input} + if isinstance(input, dict): + return cls(**input) + raise TypeError( + f"Expected None, dict, str, or list as Image input, but got {type(input)}" + ) + @dataclass class AdditionalComponent: @@ -165,8 +180,7 @@ class Connector: additional_components: List[AdditionalComponent] = field(default_factory=list) def __post_init__(self) -> None: - if isinstance(self.image, dict): - self.image = Image(**self.image) + self.image = Image.create(self.image) self.ports_left = False self.ports_right = False @@ -274,8 +288,7 @@ class Cable: additional_components: List[AdditionalComponent] = field(default_factory=list) def __post_init__(self) -> None: - if isinstance(self.image, dict): - self.image = Image(**self.image) + self.image = Image.create(self.image) if isinstance(self.gauge, str): # gauge and unit specified try: diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index c4af236..fba7bee 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -34,9 +34,8 @@ 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_image_rows, html_line_breaks, nested_html_table, remove_links, @@ -203,8 +202,7 @@ class Harness: 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)]] + *html_image_rows(connector.image)] # fmt: on rows.extend(get_additional_component_table(self, connector)) @@ -326,8 +324,7 @@ class Harness: 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)]] + *html_image_rows(cable.image)] # fmt: on rows.extend(get_additional_component_table(self, cable)) diff --git a/src/wireviz/wv_gv_html.py b/src/wireviz/wv_gv_html.py index ec80aa7..574bd2d 100644 --- a/src/wireviz/wv_gv_html.py +++ b/src/wireviz/wv_gv_html.py @@ -64,6 +64,12 @@ def html_colorbar(color: Color) -> str: return html_bgcolor(color, ' width="4"') if color else None +def html_image_rows(image): + from wireviz.wv_bom import make_list + + return sum([[[html_image(i)], [html_caption(i)]] for i in make_list(image)], []) + + def html_image(image): from wireviz.DataClasses import Image