Source code for piny.validators

from abc import ABC, abstractmethod
from typing import Any, Dict, List, Union

from .errors import ValidationError

LoadedData = Union[Dict[str, Any], List[Any]]


[docs]class Validator(ABC): """ Abstract base class for optional validator classes Use only to derive new child classes, implement all abstract methods """ def __init__(self, schema: Any, **params): self.schema = schema self.schema_params = params
[docs] @abstractmethod def load(self, data: LoadedData, **params): """ Load data, return validated data or raise en error """ pass # pragma: no cover
[docs]class PydanticValidator(Validator): # pragma: no cover """ Validator class for Pydantic Version 1 """
[docs] def load(self, data: LoadedData, **params): try: return self.schema(**data).dict() except Exception as e: raise ValidationError(origin=e, reason=str(e))
[docs]class PydanticV2Validator(Validator): """ Validator class for Pydantic Version 2 """
[docs] def load(self, data: LoadedData, **params): try: return self.schema(**data).model_dump() except Exception as e: raise ValidationError(origin=e, reason=str(e))
[docs]class MarshmallowValidator(Validator): """ Validator class for Marshmallow library """
[docs] def load(self, data: LoadedData, **params): try: return self.schema(**self.schema_params).load(data, **params) except Exception as e: raise ValidationError(origin=e, reason=str(e))
[docs]class TrafaretValidator(Validator): """ Validator class for Trafaret library """
[docs] def load(self, data: LoadedData, **params): try: return self.schema.check(data) except Exception as e: raise ValidationError(origin=e, reason=str(e))