from enum import Enum
from dataclasses import dataclass
from typing import Optional, List
class ValidationErrorCode(Enum):
REFERENCE_NOT_FOUND = 404
REFERENCE_GONE = 410 VERSION_MISMATCH = 409
INVALID_SYNTAX = 400
REFERENCE_AMBIGUOUS = 300
LAKEFS_UNAVAILABLE = 503
SCHEMA_INVALID = 500
@dataclass
class ValidationError:
code: ValidationErrorCode
message: str
reference: str severity: str layer: str remediation: Optional[str] = None metadata: Optional[dict] = None
def to_dict(self) -> dict:
return {
'code': self.code.value,
'message': self.message,
'reference': self.reference,
'severity': self.severity,
'layer': self.layer,
'remediation': self.remediation,
'metadata': self.metadata or {}
}
@dataclass
class ValidationReport:
status: str errors: List[ValidationError]
warnings: List[ValidationError]
references_checked: int
validation_time_ms: float
lakefs_commit: str
@property
def has_errors(self) -> bool:
return len(self.errors) > 0
@property
def has_warnings(self) -> bool:
return len(self.warnings) > 0
def to_dict(self) -> dict:
return {
'status': self.status,
'errors': [e.to_dict() for e in self.errors],
'warnings': [w.to_dict() for w in self.warnings],
'references_checked': self.references_checked,
'validation_time_ms': self.validation_time_ms,
'lakefs_commit': self.lakefs_commit
}