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