Coverage for lintro / enums / severity_level.py: 100%

17 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2026-04-03 18:53 +0000

1"""Severity level enum definitions. 

2 

3This module defines the supported severity levels for issues. 

4""" 

5 

6from __future__ import annotations 

7 

8from enum import auto 

9 

10from lintro.enums.uppercase_str_enum import UppercaseStrEnum 

11 

12 

13class SeverityLevel(UppercaseStrEnum): 

14 """Supported severity levels for issues. 

15 

16 Values are uppercase string identifiers matching enum member names. 

17 """ 

18 

19 ERROR = auto() 

20 WARNING = auto() 

21 INFO = auto() 

22 

23 

24# Alias table mapping native tool severity strings (upper-cased) to SeverityLevel. 

25# This lets normalize_severity_level() handle every known tool's native values 

26# without requiring per-parser changes. 

27_SEVERITY_ALIASES: dict[str, SeverityLevel] = { 

28 # Canonical names 

29 "ERROR": SeverityLevel.ERROR, 

30 "WARNING": SeverityLevel.WARNING, 

31 "INFO": SeverityLevel.INFO, 

32 # Common alternatives → INFO 

33 "NOTE": SeverityLevel.INFO, 

34 "HINT": SeverityLevel.INFO, 

35 "STYLE": SeverityLevel.INFO, 

36 "HELP": SeverityLevel.INFO, 

37 # Bandit / cargo-audit severity levels 

38 "HIGH": SeverityLevel.ERROR, 

39 "CRITICAL": SeverityLevel.ERROR, 

40 "MEDIUM": SeverityLevel.WARNING, 

41 "UNKNOWN": SeverityLevel.WARNING, 

42 "LOW": SeverityLevel.INFO, 

43 # Semgrep / Svelte-check 

44 "WARN": SeverityLevel.WARNING, 

45 # Pytest outcomes 

46 "FAILED": SeverityLevel.ERROR, 

47 "SKIPPED": SeverityLevel.INFO, 

48 "PASSED": SeverityLevel.INFO, 

49} 

50 

51 

52def normalize_severity_level(value: str | SeverityLevel) -> SeverityLevel: 

53 """Normalize a raw value to a SeverityLevel enum. 

54 

55 Looks up the upper-cased value in the alias table, which maps every known 

56 native tool severity string to one of ERROR / WARNING / INFO. 

57 

58 Args: 

59 value: str or SeverityLevel to normalize. 

60 

61 Returns: 

62 SeverityLevel: Normalized enum value. 

63 

64 Raises: 

65 ValueError: If the value is not a recognized severity string. 

66 """ 

67 if isinstance(value, SeverityLevel): 

68 return value 

69 upper = value.upper() 

70 result = _SEVERITY_ALIASES.get(upper) 

71 if result is not None: 

72 return result 

73 supported = f"Supported levels: {sorted(_SEVERITY_ALIASES)}" 

74 raise ValueError( 

75 f"Unknown severity level: {value!r}. {supported}", 

76 ) from None