/
kremls
/
python-course-junior
Обзор
Документация
Войти
/
kremls
/
python-course-junior
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
03-projects/secure-code-scanner/secure_code_scanner/findings.py
94 строки
2 KB
kremls
day 5 done
16 май 2026, 17:26
16 май 2026, 17:26
37c2b45
Код
Авторство
О чём код?
ALLOWED_SEVERITIES = {"LOW", "MEDIUM", "HIGH", "CRITICAL"} def normalize_string(value: object, max_length: int = 200) -> str: if not isinstance(value, str): return "" return value.strip()[:max_length] def normalize_line(value: object) -> int: if not isinstance(value, int): return 0 if value < 1: return 0 return value def normalize_severity(value: object) -> str: if not isinstance(value, str): return "LOW" normalized = value.strip().upper() if normalized in ALLOWED_SEVERITIES: return normalized return "LOW" def normalize_finding(raw_finding: dict) -> dict: return { "file": normalize_string(raw_finding.get("file")), "line": normalize_line(raw_finding.get("line")), "rule_id": normalize_string(raw_finding.get("rule_id")), "severity": normalize_severity(raw_finding.get("severity")), } def finding_identity(finding: dict) -> tuple[str, int, str]: return ( finding["file"], finding["line"], finding["rule_id"], ) def normalize_findings(raw_findings: list[dict]) -> list[dict]: normalized_findings = [] seen = set() for raw_finding in raw_findings: if not isinstance(raw_finding, dict): continue finding = normalize_finding(raw_finding) identity = finding_identity(finding) if identity in seen: continue seen.add(identity) normalized_findings.append(finding) return normalized_findings def count_by_severity(findings: list[dict]) -> dict: result = { "LOW": 0, "MEDIUM": 0, "HIGH": 0, "CRITICAL": 0, } for finding in findings: severity = normalize_severity(finding.get("severity")) result[severity] += 1 return result def get_unique_rule_ids(findings: list[dict]) -> set[str]: rule_ids = set() for finding in findings: rule_id = normalize_string(finding.get("rule_id")) if rule_id: rule_ids.add(rule_id) return rule_ids