Coverage for src \ sec_report_kit \ parsers \ semgrep.py: 100%
21 statements
« prev ^ index » next coverage.py v7.14.0, created at 2026-05-13 08:06 +0530
« prev ^ index » next coverage.py v7.14.0, created at 2026-05-13 08:06 +0530
1from __future__ import annotations
3from sec_report_kit.models import Finding
4from sec_report_kit.services.normalize import normalize_severity
7def _severity(extra: dict) -> str:
8 value = extra.get("severity")
9 if not value and isinstance(extra.get("metadata"), dict):
10 value = extra["metadata"].get("severity")
11 return normalize_severity(value)
14def _primary_url(extra: dict) -> str:
15 metadata = extra.get("metadata")
16 if isinstance(metadata, dict):
17 refs = metadata.get("references")
18 if isinstance(refs, list) and refs:
19 return str(refs[0])
20 return ""
23def parse_semgrep_json(data: dict) -> list[Finding]:
24 findings: list[Finding] = []
26 for issue in data.get("results", []) if isinstance(data, dict) else []:
27 extra = issue.get("extra") if isinstance(issue.get("extra"), dict) else {}
28 findings.append(
29 Finding(
30 source_type="semgrep-sast",
31 target=str(issue.get("path") or "repository"),
32 severity=_severity(extra),
33 vulnerability_id=str(issue.get("check_id") or "-"),
34 package=str(issue.get("check_id") or "semgrep-rule"),
35 installed_version="-",
36 fixed_version="-",
37 title=str(extra.get("message") or issue.get("check_id") or "Semgrep finding"),
38 primary_url=_primary_url(extra),
39 )
40 )
42 return findings