"""Adapter: bandit -f json normalized to Finding[].""" from __future__ import annotations import json from scripts.manifest import Finding _SEVERITY = {"HIGH": "high", "MEDIUM": "medium", "LOW": "low"} def parse_bandit_output(stdout: str) -> list[Finding]: try: payload = json.loads(stdout) except json.JSONDecodeError: return [] out: list[Finding] = [] for result in payload.get("results", []): line_range = result.get("line_range") or [result.get("line_number"), result.get("line_number")] out.append(Finding( tool="bandit", rule_id=result.get("test_id", ""), severity=_SEVERITY.get(result.get("issue_severity", ""), "medium"), file=result.get("filename", ""), line=line_range[0], end_line=line_range[-1], message=result.get("issue_text", ""), )) return out