Skip to content

Commit

Permalink
Bugfixes for comparisons, expanded properties, OptionedClass supercla…
Browse files Browse the repository at this point in the history
…ss (#39)

* Improvements for comparison functions.

Signed-off-by: Caroline Russell <caroline@appthreat.dev>

* Sort results.

Signed-off-by: Caroline Russell <caroline@appthreat.dev>

* Filter empty at the end.

Signed-off-by: Caroline Russell <caroline@appthreat.dev>

* Add additional properties.

Signed-off-by: Caroline Russell <caroline@appthreat.dev>

* Use superclass for options.

Signed-off-by: Caroline Russell <caroline@appthreat.dev>

* Bump version, test python 3.13

Signed-off-by: Caroline Russell <caroline@appthreat.dev>

* Typing.

Signed-off-by: Caroline Russell <caroline@appthreat.dev>

---------

Signed-off-by: Caroline Russell <caroline@appthreat.dev>
  • Loading branch information
cerrussell authored Oct 14, 2024
1 parent 7d3fb97 commit 411a807
Show file tree
Hide file tree
Showing 5 changed files with 216 additions and 154 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/testing.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
python-version: ["3.10", "3.11", "3.12"]
python-version: ["3.10", "3.11", "3.12", "3.13"]
fail-fast: false
steps:
- uses: actions/checkout@v4
Expand Down
26 changes: 14 additions & 12 deletions custom_json_diff/lib/custom_diff.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,19 +109,19 @@ def generate_bom_diff(bom: BomDicts, commons: BomDicts, common_refs: Dict) -> Di
diff_summary["components"]["other_components"].append(i.to_dict()) #type: ignore
diff_summary["misc_data"] = (bom.misc_data - commons.misc_data).to_dict()
diff_summary["components"] = filter_empty(bom.options.include_empty, diff_summary["components"]) #type: ignore
return filter_empty(commons.options.include_empty, diff_summary)
return diff_summary


def generate_csaf_diff(csaf: CsafDicts, commons: CsafDicts, common_refs: Dict[str, Set]) -> Dict:
return {
csaf.filename: filter_empty(commons.options.include_empty, {
"document": (csaf.document - commons.document).to_dict(),
"product_tree": (csaf.product_tree - commons.product_tree).to_dict(),
"vulnerabilities": [
i.to_dict() for i in csaf.vulnerabilities
if i.title not in common_refs["vulnerabilities"]
]
})
csaf.filename: {
"document": (csaf.document - commons.document).to_dict(),
"product_tree": (csaf.product_tree - commons.product_tree).to_dict(),
"vulnerabilities": [
i.to_dict() for i in csaf.vulnerabilities
if i.title not in common_refs["vulnerabilities"]
]
}
}


Expand Down Expand Up @@ -223,7 +223,7 @@ def parse_purls(deps: List[Dict], regex: re.Pattern) -> List[Dict]:
def perform_bom_diff(bom_1: BomDicts, bom_2: BomDicts) -> Tuple[int, Dict]:
b1, b2 = order_documents(bom_1, bom_2)
common_bom = b1.intersection(b2, "common_summary")
output = common_bom.to_summary()
output = filter_empty(common_bom.options.include_empty, common_bom.to_summary())
status, diffs = summarize_bom_diffs(b1, b2, common_bom)
output |= {"diff_summary": diffs}
return status, output
Expand All @@ -243,6 +243,7 @@ def report_results(status: int, diffs: Dict, options: Options, j1: BomDicts, j2:
logger.info("No differences found.")
else:
logger.info("Differences found.")
diffs = sort_dict(diffs, options.sort_keys)
if options.preconfig_type:
report_file = options.output.replace(".json", "") + ".html"
if options.preconfig_type == "bom":
Expand Down Expand Up @@ -292,7 +293,8 @@ def summarize_bom_diffs(bom_1: BomDicts, bom_2: BomDicts, commons: BomDicts) ->
summary_1 = generate_bom_diff(bom_1, commons, common_refs)
summary_2 = generate_bom_diff(bom_2, commons_2, common_refs)
status = max(get_bom_status(summary_1), get_bom_status(summary_2))
return status, {bom_1.filename: summary_1, bom_2.filename: summary_2}
return status, {bom_1.filename: filter_empty(bom_1.options.include_empty, summary_1),
bom_2.filename: filter_empty(bom_1.options.include_empty, summary_2)}


def summarize_csaf_diffs(csaf_1: CsafDicts, csaf_2: CsafDicts, commons: CsafDicts) -> Tuple[int, Dict]:
Expand All @@ -302,4 +304,4 @@ def summarize_csaf_diffs(csaf_1: CsafDicts, csaf_2: CsafDicts, commons: CsafDict
diff_summary = generate_csaf_diff(csaf_1, commons, common_refs)
diff_summary |= generate_csaf_diff(csaf_2, commons_2, common_refs)
status = max(get_csaf_status(diff_summary[csaf_1.filename]), get_csaf_status(diff_summary[csaf_2.filename]))
return status, diff_summary
return status, filter_empty(csaf_1.options.include_empty, diff_summary)
Loading

0 comments on commit 411a807

Please sign in to comment.