bom: column-format update initial

This commit is contained in:
Laurier Loiselle 2023-04-21 11:57:54 -04:00
parent 26b1cc8f9f
commit 720fce3a37
No known key found for this signature in database
GPG Key ID: 345920CC72089A3F
3 changed files with 17 additions and 10 deletions

View File

@ -34,22 +34,28 @@ def partnumbers2list(
return [p.str_list for p in partnumbers if p]
def bom_list(bom, restrict_printed_lengths=True):
def bom_list(bom, restrict_printed_lengths=True, filter_entries=False):
entries_as_dict = []
has_content = set()
# First pass, get all bom dict and identify filled columns
for entry in bom.values():
entry.restrict_printed_lengths = restrict_printed_lengths
has_content = has_content.union(entry.bom_defined)
entries_as_dict.append(entry.bom_dict)
first_entry = list(bom.values())[0] # Used for column manipulation
keys_with_content = [k for k in first_entry.bom_keys if k in has_content]
headers = [first_entry.bom_column(k) for k in keys_with_content]
has_content = {}
bom_columns = list(entries_as_dict[0].keys())
has_content = {
k
for k in bom_columns
if any(e[k] for e in entries_as_dict)
}
headers = bom_columns
if filter_entries:
headers = [k for k in bom_columns if k in has_content]
entries_as_list = []
for entry in entries_as_dict:
entries_as_list.append([v for k, v in entry.items() if k in keys_with_content])
entries_as_list.append([v for k, v in entry.items() if k in headers])
table = [headers] + entries_as_list

View File

@ -186,7 +186,7 @@ class Harness:
key=lambda x: (x[1].id,),
)
)
# from wireviz.wv_bom import print_bom_table ; print_bom_table(self.bom) # for debugging
from wireviz.wv_bom import print_bom_table ; print_bom_table(self.bom) # for debugging
def connect(
self,
@ -386,8 +386,8 @@ class Harness:
if "gv" in fmt:
graph.save(filename=filename.with_suffix(".gv"))
# BOM output
bomlist = bom_list(self.bom)
if "tsv" in fmt:
bomlist = bom_list(self.bom, restrict_printed_lengths=False)
bom_tsv = bom2tsv(bomlist)
filename.with_suffix(".tsv").open("w").write(bom_tsv)
if "csv" in fmt:
@ -395,6 +395,7 @@ class Harness:
print("CSV output is not yet supported")
# HTML output
if "html" in fmt:
bomlist = bom_list(self.bom, filter_entries=True)
generate_html_output(filename, bomlist, self.metadata, self.options)
# PDF output
if "pdf" in fmt:

View File

@ -104,7 +104,7 @@ def generate_shared_bom(
for bom_item in shared_bom.values():
bom_item.scale_per_harness(qty_multipliers)
shared_bomlist = bom_list(shared_bom, False)
shared_bomlist = bom_list(shared_bom, restrict_printed_lengths=False, filter_entries=True)
shared_bom_tsv = bom2tsv(shared_bomlist)
shared_bom_file.open("w").write(shared_bom_tsv)