Bases: ProjectRule
Run Bandit and score based on vulnerability severity.
Scoring: 100 - (high_count * 15 + medium_count * 5), min 0.
Source code in packages/axm-audit/src/axm_audit/core/rules/security.py
| @dataclass
@register_rule("security")
class SecurityRule(ProjectRule):
"""Run Bandit and score based on vulnerability severity.
Scoring: 100 - (high_count * 15 + medium_count * 5), min 0.
"""
@property
def rule_id(self) -> str:
"""Unique identifier for this rule."""
return "QUALITY_SECURITY"
def check(self, project_path: Path) -> CheckResult:
"""Check project security with Bandit."""
early = self.check_src(project_path)
if early is not None:
return early
src_path = project_path / "src"
try:
data = _run_bandit(src_path, project_path)
except FileNotFoundError:
return CheckResult(
rule_id=self.rule_id,
passed=False,
message="bandit not available",
severity=Severity.ERROR,
details={"high_count": 0, "medium_count": 0, "score": 0},
fix_hint="Install with: uv add --dev bandit",
)
except RuntimeError as exc:
return CheckResult(
rule_id=self.rule_id,
passed=False,
message=str(exc),
severity=Severity.ERROR,
details={"high_count": 0, "medium_count": 0, "score": 0},
fix_hint="Check bandit installation: uv run bandit --version",
)
return _build_security_result(self.rule_id, data.get("results", []))
|
rule_id
property
Unique identifier for this rule.
check(project_path)
Check project security with Bandit.
Source code in packages/axm-audit/src/axm_audit/core/rules/security.py
| def check(self, project_path: Path) -> CheckResult:
"""Check project security with Bandit."""
early = self.check_src(project_path)
if early is not None:
return early
src_path = project_path / "src"
try:
data = _run_bandit(src_path, project_path)
except FileNotFoundError:
return CheckResult(
rule_id=self.rule_id,
passed=False,
message="bandit not available",
severity=Severity.ERROR,
details={"high_count": 0, "medium_count": 0, "score": 0},
fix_hint="Install with: uv add --dev bandit",
)
except RuntimeError as exc:
return CheckResult(
rule_id=self.rule_id,
passed=False,
message=str(exc),
severity=Severity.ERROR,
details={"high_count": 0, "medium_count": 0, "score": 0},
fix_hint="Check bandit installation: uv run bandit --version",
)
return _build_security_result(self.rule_id, data.get("results", []))
|