Add rule and finding models
This commit is contained in:
@@ -1,14 +1,10 @@
|
|||||||
"""Finding model for validation results."""
|
"""Finding model."""
|
||||||
|
|
||||||
import re
|
import re
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class Finding:
|
class Finding:
|
||||||
"""Represents a validation finding."""
|
|
||||||
|
|
||||||
rule_id: str
|
rule_id: str
|
||||||
rule_name: str
|
rule_name: str
|
||||||
severity: str
|
severity: str
|
||||||
@@ -19,52 +15,19 @@ class Finding:
|
|||||||
matched_text: str = ""
|
matched_text: str = ""
|
||||||
context: str = ""
|
context: str = ""
|
||||||
|
|
||||||
def to_dict(self) -> dict:
|
def to_dict(self):
|
||||||
"""Convert finding to dictionary."""
|
|
||||||
return {
|
return {
|
||||||
"rule_id": self.rule_id,
|
"rule_id": self.rule_id, "rule_name": self.rule_name,
|
||||||
"rule_name": self.rule_name,
|
"severity": self.severity, "message": self.message,
|
||||||
"severity": self.severity,
|
"suggestion": self.suggestion, "line_number": self.line_number,
|
||||||
"message": self.message,
|
"column": self.column, "matched_text": self.matched_text, "context": self.context,
|
||||||
"suggestion": self.suggestion,
|
|
||||||
"line_number": self.line_number,
|
|
||||||
"column": self.column,
|
|
||||||
"matched_text": self.matched_text,
|
|
||||||
"context": self.context,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_match(
|
def from_match(cls, rule, match, line_number=None, context=""):
|
||||||
cls,
|
|
||||||
rule,
|
|
||||||
match: re.Match[str],
|
|
||||||
line_number: Optional[int] = None,
|
|
||||||
context: str = "",
|
|
||||||
) -> "Finding":
|
|
||||||
"""Create a Finding from a regex match."""
|
|
||||||
return cls(
|
return cls(
|
||||||
rule_id=rule.id,
|
rule_id=rule.id, rule_name=rule.name, severity=rule.severity,
|
||||||
rule_name=rule.name,
|
message=rule.message, suggestion=rule.suggestion,
|
||||||
severity=rule.severity,
|
line_number=line_number, column=match.start() + 1 if match.start() >= 0 else None,
|
||||||
message=rule.message,
|
matched_text=match.group(0), context=context,
|
||||||
suggestion=rule.suggestion,
|
|
||||||
line_number=line_number,
|
|
||||||
column=match.start() + 1 if match.start() >= 0 else None,
|
|
||||||
matched_text=match.group(0),
|
|
||||||
context=context,
|
|
||||||
)
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def from_dict(cls, data: dict) -> "Finding":
|
|
||||||
"""Create a Finding from a dictionary."""
|
|
||||||
return cls(
|
|
||||||
rule_id=data["rule_id"],
|
|
||||||
rule_name=data["rule_name"],
|
|
||||||
severity=data["severity"],
|
|
||||||
message=data["message"],
|
|
||||||
suggestion=data.get("suggestion", ""),
|
|
||||||
line_number=data.get("line_number"),
|
|
||||||
column=data.get("column"),
|
|
||||||
matched_text=data.get("matched_text", ""),
|
|
||||||
context=data.get("context", ""),
|
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user