From 3cf89df4fb2c6995896ef2a5a16db5cc73a79589 Mon Sep 17 00:00:00 2001 From: Alexandru Croitor Date: Fri, 30 Aug 2024 15:22:56 +0200 Subject: [PATCH] feat: Support displaying multiple PURL and CPE values (fixes #4) --- sbom2doc/generator.py | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/sbom2doc/generator.py b/sbom2doc/generator.py index c9f8359..98db94f 100644 --- a/sbom2doc/generator.py +++ b/sbom2doc/generator.py @@ -145,26 +145,42 @@ def generate_document(format, sbom_parser, filename, outfile, include_license): # Show Purl and CPE information sbom_document.paragraph("") - sbom_document.createtable( - ["Name", "PURL", "CPE"], [12, 12, 15] - ) + sbom_document.createtable(["Name", "PURL"], [12, 12]) for package in packages: name = package.get("name", None) - purl = cpe = "" + purl = "" external_info = package.get("externalreference", None) + at_least_one_found = False if external_info is not None: for reference in external_info: if reference[1] == "purl": try: purl = reference[2] + at_least_one_found = True + sbom_document.addrow([name, purl]) except ValueError: purl = "" - elif reference[1] in ["cpe22Type", "cpe23Type"]: - cpe = reference[2] + if not at_least_one_found: + sbom_document.addrow([name, purl]) + sbom_document.showtable(widths=[5, 2]) - sbom_document.addrow([name, purl, cpe]) - sbom_document.showtable(widths=[5, 2, 2, 2, 2]) + sbom_document.paragraph("") + sbom_document.createtable(["Name", "CPE"], [12, 12]) + for package in packages: + name = package.get("name", None) + cpe = "" + external_info = package.get("externalreference", None) + at_least_one_found = False + if external_info is not None: + for reference in external_info: + if reference[1] in ["cpe22Type", "cpe23Type"]: + cpe = reference[2] + at_least_one_found = True + sbom_document.addrow([name, cpe]) + if not at_least_one_found: + sbom_document.addrow([name, cpe]) + sbom_document.showtable(widths=[5, 2]) sbom_document.heading(1, "Component Type Summary") sbom_document.createtable(["Type", "Count"], [25, 6])