Skip to content

Commit 411a807

Browse files
authored
Bugfixes for comparisons, expanded properties, OptionedClass superclass (#39)
* Improvements for comparison functions. Signed-off-by: Caroline Russell <[email protected]> * Sort results. Signed-off-by: Caroline Russell <[email protected]> * Filter empty at the end. Signed-off-by: Caroline Russell <[email protected]> * Add additional properties. Signed-off-by: Caroline Russell <[email protected]> * Use superclass for options. Signed-off-by: Caroline Russell <[email protected]> * Bump version, test python 3.13 Signed-off-by: Caroline Russell <[email protected]> * Typing. Signed-off-by: Caroline Russell <[email protected]> --------- Signed-off-by: Caroline Russell <[email protected]>
1 parent 7d3fb97 commit 411a807

File tree

5 files changed

+216
-154
lines changed

5 files changed

+216
-154
lines changed

.github/workflows/testing.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ jobs:
1313
strategy:
1414
matrix:
1515
os: [ubuntu-latest, macos-latest, windows-latest]
16-
python-version: ["3.10", "3.11", "3.12"]
16+
python-version: ["3.10", "3.11", "3.12", "3.13"]
1717
fail-fast: false
1818
steps:
1919
- uses: actions/checkout@v4

custom_json_diff/lib/custom_diff.py

+14-12
Original file line numberDiff line numberDiff line change
@@ -109,19 +109,19 @@ def generate_bom_diff(bom: BomDicts, commons: BomDicts, common_refs: Dict) -> Di
109109
diff_summary["components"]["other_components"].append(i.to_dict()) #type: ignore
110110
diff_summary["misc_data"] = (bom.misc_data - commons.misc_data).to_dict()
111111
diff_summary["components"] = filter_empty(bom.options.include_empty, diff_summary["components"]) #type: ignore
112-
return filter_empty(commons.options.include_empty, diff_summary)
112+
return diff_summary
113113

114114

115115
def generate_csaf_diff(csaf: CsafDicts, commons: CsafDicts, common_refs: Dict[str, Set]) -> Dict:
116116
return {
117-
csaf.filename: filter_empty(commons.options.include_empty, {
118-
"document": (csaf.document - commons.document).to_dict(),
119-
"product_tree": (csaf.product_tree - commons.product_tree).to_dict(),
120-
"vulnerabilities": [
121-
i.to_dict() for i in csaf.vulnerabilities
122-
if i.title not in common_refs["vulnerabilities"]
123-
]
124-
})
117+
csaf.filename: {
118+
"document": (csaf.document - commons.document).to_dict(),
119+
"product_tree": (csaf.product_tree - commons.product_tree).to_dict(),
120+
"vulnerabilities": [
121+
i.to_dict() for i in csaf.vulnerabilities
122+
if i.title not in common_refs["vulnerabilities"]
123+
]
124+
}
125125
}
126126

127127

@@ -223,7 +223,7 @@ def parse_purls(deps: List[Dict], regex: re.Pattern) -> List[Dict]:
223223
def perform_bom_diff(bom_1: BomDicts, bom_2: BomDicts) -> Tuple[int, Dict]:
224224
b1, b2 = order_documents(bom_1, bom_2)
225225
common_bom = b1.intersection(b2, "common_summary")
226-
output = common_bom.to_summary()
226+
output = filter_empty(common_bom.options.include_empty, common_bom.to_summary())
227227
status, diffs = summarize_bom_diffs(b1, b2, common_bom)
228228
output |= {"diff_summary": diffs}
229229
return status, output
@@ -243,6 +243,7 @@ def report_results(status: int, diffs: Dict, options: Options, j1: BomDicts, j2:
243243
logger.info("No differences found.")
244244
else:
245245
logger.info("Differences found.")
246+
diffs = sort_dict(diffs, options.sort_keys)
246247
if options.preconfig_type:
247248
report_file = options.output.replace(".json", "") + ".html"
248249
if options.preconfig_type == "bom":
@@ -292,7 +293,8 @@ def summarize_bom_diffs(bom_1: BomDicts, bom_2: BomDicts, commons: BomDicts) ->
292293
summary_1 = generate_bom_diff(bom_1, commons, common_refs)
293294
summary_2 = generate_bom_diff(bom_2, commons_2, common_refs)
294295
status = max(get_bom_status(summary_1), get_bom_status(summary_2))
295-
return status, {bom_1.filename: summary_1, bom_2.filename: summary_2}
296+
return status, {bom_1.filename: filter_empty(bom_1.options.include_empty, summary_1),
297+
bom_2.filename: filter_empty(bom_1.options.include_empty, summary_2)}
296298

297299

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

0 commit comments

Comments
 (0)