From 774b9bb4c44b83bd003676165d9073883c0f89b5 Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Thu, 29 Jan 2026 21:26:08 +0000 Subject: [PATCH] Add rule and finding models --- src/models/finding.py | 59 ++++++++----------------------------------- 1 file changed, 11 insertions(+), 48 deletions(-) diff --git a/src/models/finding.py b/src/models/finding.py index f75a1cc..51482cd 100644 --- a/src/models/finding.py +++ b/src/models/finding.py @@ -1,14 +1,10 @@ -"""Finding model for validation results.""" - +"""Finding model.""" import re from dataclasses import dataclass from typing import Optional - @dataclass class Finding: - """Represents a validation finding.""" - rule_id: str rule_name: str severity: str @@ -19,52 +15,19 @@ class Finding: matched_text: str = "" context: str = "" - def to_dict(self) -> dict: - """Convert finding to dictionary.""" + def to_dict(self): return { - "rule_id": self.rule_id, - "rule_name": self.rule_name, - "severity": self.severity, - "message": self.message, - "suggestion": self.suggestion, - "line_number": self.line_number, - "column": self.column, - "matched_text": self.matched_text, - "context": self.context, + "rule_id": self.rule_id, "rule_name": self.rule_name, + "severity": self.severity, "message": self.message, + "suggestion": self.suggestion, "line_number": self.line_number, + "column": self.column, "matched_text": self.matched_text, "context": self.context, } @classmethod - def from_match( - cls, - rule, - match: re.Match[str], - line_number: Optional[int] = None, - context: str = "", - ) -> "Finding": - """Create a Finding from a regex match.""" + def from_match(cls, rule, match, line_number=None, context=""): return cls( - rule_id=rule.id, - rule_name=rule.name, - severity=rule.severity, - message=rule.message, - 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", ""), + rule_id=rule.id, rule_name=rule.name, severity=rule.severity, + message=rule.message, suggestion=rule.suggestion, + line_number=line_number, column=match.start() + 1 if match.start() >= 0 else None, + matched_text=match.group(0), context=context, )