Add rule and finding models

This commit is contained in:
2026-01-29 21:26:08 +00:00
parent 5e4cac42a4
commit fcf70753c3

View File

@@ -1,14 +1,10 @@
"""Rule model for validation patterns.""" """Rule model."""
import re import re
from dataclasses import dataclass, field from dataclasses import dataclass, field
from typing import Optional, Pattern from typing import Optional, Pattern
@dataclass @dataclass
class Rule: class Rule:
"""Represents a validation rule."""
id: str id: str
name: str name: str
pattern: str pattern: str
@@ -19,43 +15,27 @@ class Rule:
_compiled_pattern: Optional[Pattern[str]] = field(default=None, repr=False) _compiled_pattern: Optional[Pattern[str]] = field(default=None, repr=False)
def __post_init__(self): def __post_init__(self):
"""Compile the regex pattern after initialization."""
try: try:
self._compiled_pattern = re.compile(self.pattern) self._compiled_pattern = re.compile(self.pattern)
except re.error as e: except re.error as e:
raise ValueError(f"Invalid regex pattern '{self.pattern}': {e}") raise ValueError(f"Invalid regex pattern '{self.pattern}': {e}")
def match(self, text: str) -> Optional[re.Match[str]]: def match(self, text: str):
"""Match the pattern against text."""
if self._compiled_pattern: if self._compiled_pattern:
return self._compiled_pattern.search(text) return self._compiled_pattern.search(text)
return None return None
def matches(self, text: str) -> bool: def to_dict(self):
"""Check if the pattern matches the text."""
return self.match(text) is not None
def to_dict(self) -> dict:
"""Convert rule to dictionary."""
return { return {
"id": self.id, "id": self.id, "name": self.name, "pattern": self.pattern,
"name": self.name, "severity": self.severity, "message": self.message,
"pattern": self.pattern, "suggestion": self.suggestion, "enabled": self.enabled,
"severity": self.severity,
"message": self.message,
"suggestion": self.suggestion,
"enabled": self.enabled,
} }
@classmethod @classmethod
def from_dict(cls, data: dict) -> "Rule": def from_dict(cls, data):
"""Create a Rule from a dictionary."""
return cls( return cls(
id=data["id"], id=data["id"], name=data["name"], pattern=data["pattern"],
name=data["name"], severity=data["severity"], message=data["message"],
pattern=data["pattern"], suggestion=data.get("suggestion", ""), enabled=data.get("enabled", True),
severity=data["severity"],
message=data["message"],
suggestion=data.get("suggestion", ""),
enabled=data.get("enabled", True),
) )