Spaces:
Sleeping
Sleeping
| """Domain errors for validation and export.""" | |
| from __future__ import annotations | |
| from enum import StrEnum | |
| from pydantic import BaseModel, ConfigDict, Field | |
| class Severity(StrEnum): | |
| """Severity level for validation entries.""" | |
| ERROR = "error" | |
| WARNING = "warning" | |
| INFO = "info" | |
| class ValidationEntry(BaseModel): | |
| """A single validation finding.""" | |
| model_config = ConfigDict(frozen=True) | |
| validator: str = Field(min_length=1) | |
| severity: Severity | |
| path: str = Field( | |
| min_length=1, | |
| description="Path in the document, e.g. pages[0].text_regions[1].lines[3]", | |
| ) | |
| message: str = Field(min_length=1) | |
| code: str | None = None | |
| class ValidationReport(BaseModel): | |
| """Aggregated results from all validators.""" | |
| entries: list[ValidationEntry] = Field(default_factory=list) | |
| def errors(self) -> list[ValidationEntry]: | |
| return [e for e in self.entries if e.severity == Severity.ERROR] | |
| def warnings(self) -> list[ValidationEntry]: | |
| return [e for e in self.entries if e.severity == Severity.WARNING] | |
| def is_valid(self) -> bool: | |
| return len(self.errors) == 0 | |
| def error_count(self) -> int: | |
| return len(self.errors) | |
| def warning_count(self) -> int: | |
| return len(self.warnings) | |
| def add(self, entry: ValidationEntry) -> None: | |
| self.entries.append(entry) | |
| def merge(self, other: ValidationReport) -> None: | |
| self.entries.extend(other.entries) | |