diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index c4af236..1ed1edc 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -70,6 +70,7 @@ class Harness: metadata: Metadata options: Options tweak: Tweak + source_path: Path def __post_init__(self): self.connectors = {} @@ -697,7 +698,7 @@ class Harness: print("CSV output is not yet supported") # HTML output if "html" in fmt: - generate_html_output(filename, bomlist, self.metadata, self.options) + generate_html_output(filename, bomlist, self.metadata, self.options, self.source_path) # PDF output if "pdf" in fmt: # TODO: implement PDF output diff --git a/src/wireviz/wireviz.py b/src/wireviz/wireviz.py index 391b1ac..fe06ce5 100755 --- a/src/wireviz/wireviz.py +++ b/src/wireviz/wireviz.py @@ -31,6 +31,7 @@ def parse( output_dir: Union[str, Path] = None, output_name: Union[None, str] = None, image_paths: Union[Path, str, List] = [], + source_path = None, ) -> Any: """ This function takes an input, parses it as a WireViz Harness file, @@ -115,6 +116,7 @@ def parse( metadata=Metadata(**yaml_data.get("metadata", {})), options=Options(**yaml_data.get("options", {})), tweak=Tweak(**yaml_data.get("tweak", {})), + source_path=source_path ) # others # store mapping of components to their respective template diff --git a/src/wireviz/wv_cli.py b/src/wireviz/wv_cli.py index c83e1cc..3783594 100644 --- a/src/wireviz/wv_cli.py +++ b/src/wireviz/wv_cli.py @@ -144,6 +144,7 @@ def wireviz(file, format, prepend, output_dir, output_name, version): output_dir=_output_dir, output_name=_output_name, image_paths=list(image_paths), + source_path=file ) print() diff --git a/src/wireviz/wv_html.py b/src/wireviz/wv_html.py index 4230110..f5b9b0c 100644 --- a/src/wireviz/wv_html.py +++ b/src/wireviz/wv_html.py @@ -21,14 +21,19 @@ def generate_html_output( bom_list: List[List[str]], metadata: Metadata, options: Options, + source: Union[str, Path] = None, ): # load HTML template templatename = metadata.get("template", {}).get("name") + template_search_paths = [ Path(filename).parent, Path(__file__).parent / "templates"] + + if source is not None: + template_search_paths.insert(0, Path(source).parent) + 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"], + f"{templatename}.html", template_search_paths ) else: # fall back to built-in simple template if no template was provided