from pathlib import Path from typing import Optional from jinja2 import Environment, PackageLoader, select_autoescape from ee.tools import mk_parents from ee.xml import types, bom_file_utils class Message(object): def __init__(self, object: Optional[str] = None, text: Optional[str] = None): self.object = object self.text = text def section_filter(s: str): return "{}\n{}".format(s, "=" * len(s)) def subsection_filter(s: str): return "{}\n{}".format(s, "-" * len(s)) def subsubsection_filter(s: str): return "{}\n{}".format(s, "~" * len(s)) def subsubsubsection_filter(s: str): return "{}\n{}".format(s, "." * len(s)) def first_pn_filter(part: types.Part): return next(iter(bom_file_utils.part_numbers(part)), None) def first_spn_filter(part: types.Part): return next(iter(bom_file_utils.supplier_part_numbers(part)), None) def save_report(package: str, template_name: str, out_file: Path, **kwargs): env = Environment( loader=PackageLoader(package, "templates"), autoescape=select_autoescape(["html", "xml"]), ) env.filters["subsection"] = subsection_filter env.filters["subsubsection"] = subsubsection_filter env.filters["subsubsubsection"] = subsubsubsection_filter env.filters["first_pn"] = first_pn_filter env.filters["first_spn"] = first_spn_filter mk_parents(out_file) with out_file.open("w") as f: template = env.get_template(template_name) f.write(template.render(**kwargs))