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"