Add rule and finding models
This commit is contained in:
@@ -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),
|
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user