audit-labs/audit-report
Turn audit-tools evidence packages into control-mapped, auditor-ready reports.
clone: git clone https://gitbay.org/audit-labs/audit-report.git
v0.1.0: audit_report/reporters/json.py · raw
1"""JSON renderer — a machine-readable record of the same findings.
2
3Useful for feeding results into a dashboard, a ticket pipeline, or a diff
4between two audit runs.
5"""
6
7from __future__ import annotations
8
9import json as _json
10from typing import TYPE_CHECKING
11
12if TYPE_CHECKING:
13 from . import Report
14
15
16def to_dict(report: Report) -> dict:
17 """Serialize a report to a plain dict (stable key order for diffing)."""
18 pkg = report.package
19 return {
20 "subject": pkg.subject,
21 "platform": pkg.platform,
22 "source_package": pkg.path.name,
23 "generated_at": report.generated_at,
24 "tool": report.provenance["tool"],
25 "ruleset": report.provenance["ruleset"],
26 "summary": report.counts,
27 "coverage": report.coverage,
28 "findings": [
29 {
30 "id": f.rule.id,
31 "title": f.rule.title,
32 "status": f.status,
33 "severity": f.rule.severity,
34 "controls": f.rule.controls,
35 "reason": f.reason,
36 "evidence": f.evidence,
37 }
38 for f in report.findings
39 ],
40 }
41
42
43def render(report: Report) -> str:
44 return _json.dumps(to_dict(report), indent=2, sort_keys=False) + "\n"