vrfefavr's picture
deploy: full project without binary files
547bb9a
"""
Error Detection Base — Severity enum, DetectionResult, and base class.
"""
from __future__ import annotations
from dataclasses import dataclass, field
from enum import Enum
from typing import List, Optional
class Severity(str, Enum):
CRITICAL = "CRITICAL"
WARNING = "WARNING"
INFO = "INFO"
@dataclass
class DetectionResult:
page: str
check: str
severity: Severity
message: str
detail: Optional[str] = None
ok: bool = False
def to_dict(self) -> dict:
return {
"page": self.page,
"check": self.check,
"severity": self.severity.value,
"message": self.message,
"detail": self.detail,
"ok": self.ok,
}
class ErrorDetector:
"""Base class for all page-level error detectors."""
page: str = "unknown"
def run(self) -> List[DetectionResult]:
raise NotImplementedError
def _ok(self, check: str, message: str) -> DetectionResult:
return DetectionResult(page=self.page, check=check, severity=Severity.INFO,
message=message, ok=True)
def _warn(self, check: str, message: str, detail: str = None) -> DetectionResult:
return DetectionResult(page=self.page, check=check, severity=Severity.WARNING,
message=message, detail=detail, ok=False)
def _critical(self, check: str, message: str, detail: str = None) -> DetectionResult:
return DetectionResult(page=self.page, check=check, severity=Severity.CRITICAL,
message=message, detail=detail, ok=False)