diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index 4d9fd51..a1153a0 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -290,7 +290,7 @@ class Harness: @property def html(self): - bom_list = self.bom_list() + bom_list = self._bom_list() string = '' string += '\n' @@ -329,82 +329,39 @@ class Harness: @property def csv(self): return bom_helper.generate_bom_outputs( - self.bom_list(), + self._bom_list(), 'csv' ) @property def csv_excel(self): return bom_helper.generate_bom_outputs( - self.bom_list(), + self._bom_list(), 'csv_excel' ) @property def csv_unix(self): return bom_helper.generate_bom_outputs( - self.bom_list(), + self._bom_list(), 'csv_unix' ) @property def tsv(self): return bom_helper.generate_bom_outputs( - self.bom_list(), + self._bom_list(), 'tsv' ) @property def tsv_excel(self): return bom_helper.generate_bom_outputs( - self.bom_list(), + self._bom_list(), 'tsv_excel' ) - def output(self, filename: (str, Path), view: bool = False, cleanup: bool = True, fmt: tuple = ('pdf', )) -> None: - # graphical output - graph = self.create_graph() - for f in fmt: - graph.format = f - graph.render(filename=filename, view=view, cleanup=cleanup) - graph.save(filename=f'{filename}.gv') - # bom output - bom_list = self.bom_list() - # todo: support user choices of BOM format (probably also graphviz outputs, html outputs) - bom_helper.generate_bom_outputs(filename, bom_list, [bom_helper.WIREVIZ_TSV, bom_helper.EXCEL_CSV]) - # HTML output - with open_file_write(f'{filename}.html') as file: - file.write('\n') - file.write(f'') - - file.write('

Diagram

') - with open_file_read(f'{filename}.svg') as svg: - file.write(re.sub( - '^<[?]xml [^?>]*[?]>[^<]*]*>', - '', - svg.read(1024), 1)) - for svgdata in svg: - file.write(svgdata) - - file.write('

Bill of Materials

') - listy = flatten2d(bom_list) - file.write('') - file.write('') - for item in listy[0]: - file.write(f'') - file.write('') - for row in listy[1:]: - file.write('') - for i, item in enumerate(row): - item_str = item.replace('\u00b2', '²') - align = 'align="right"' if listy[0][i] == 'Qty' else '' - file.write(f'') - file.write('') - file.write('
{item}
{item_str}
') - - file.write('') - - def bom(self): + def _bom(self): bom = [] bom_connectors = [] bom_cables = [] @@ -484,8 +441,8 @@ class Harness: bom.extend(bom_extra) return bom - def bom_list(self): - bom = self.bom() + def _bom_list(self): + bom = self._bom() keys = ['item', 'qty', 'unit', 'designators'] # these BOM columns will always be included for fieldname in ['manufacturer', 'manufacturer part number', 'internal part number']: # these optional BOM columns will only be included if at least one BOM item actually uses them if any(fieldname in x and x.get(fieldname, None) for x in bom):