File size: 1,596 Bytes
344e38f
f8b17b7
e1ce20c
 
 
 
 
 
 
 
344e38f
 
f8b17b7
344e38f
 
 
 
e1ce20c
 
 
 
 
 
344e38f
 
f8b17b7
344e38f
 
 
 
e1ce20c
 
 
 
 
344e38f
 
f8b17b7
344e38f
 
 
 
e1ce20c
 
 
 
 
 
 
 
 
7eedda0
 
e1ce20c
 
7eedda0
a79668c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
from pydantic import BaseModel, model_validator, field_validator
from typing import List, Optional, Any


class Bug(BaseModel):
    description: str
    file: str = "unknown"
    line: Optional[int] = None
    severity: str = "critical"

    @field_validator("file", mode="before")
    @classmethod
    def coerce_file(cls, v: Any) -> str:
        if isinstance(v, list):
            return ", ".join(str(f) for f in v) if v else "unknown"
        return v or "unknown"


class Warning(BaseModel):
    description: str
    file: str = "unknown"
    line: Optional[int] = None

    @field_validator("file", mode="before")
    @classmethod
    def coerce_file(cls, v: Any) -> str:
        if isinstance(v, list):
            return ", ".join(str(f) for f in v) if v else "unknown"
        return v or "unknown"


class Suggestion(BaseModel):
    description: str
    file: str = "unknown"

    @field_validator("file", mode="before")
    @classmethod
    def coerce_file(cls, v: Any) -> str:
        if isinstance(v, list):
            return ", ".join(str(f) for f in v) if v else "unknown"
        return v or "unknown"


class IssueReport(BaseModel):
    critical: List[Bug] = []
    warnings: List[Warning] = []
    suggestions: List[Suggestion] = []
    total_critical: int = 0
    total_warnings: int = 0
    total_suggestions: int = 0

    @model_validator(mode="after")
    def compute_totals(self) -> "IssueReport":
        self.total_critical = len(self.critical)
        self.total_warnings = len(self.warnings)
        self.total_suggestions = len(self.suggestions)
        return self