validobj package
Module contents
Validobj gives you valid objects
Submodules
validobj.validation module
The validation module implements the parse_input()
function.
- validobj.validation.parse_input(value: Any, spec: Type[T]) T
This is the main entry point of the validobj module. Validates and processes the input value based on the provided specification.
- Parameters:
- Returns:
value – The processed form of value. This can be the input value itself if only a (recursive) type check was performed or a more structured output, based on the type of the specification.
- Return type:
Any, compatible with
spec
- Raises:
ValidationError – Raised if the input cannot be coerced to the spec. An appropriate subclass defined in
validobj.errors
will contain more specific information as well__cause__
fields chained as neccessary.
Notes
The parameters are described in detail in Input and output.
The error handling is described in Errors.
Examples
Check that a given input is a mapping of string to integer:
>>> validobj.parse_input({'key1': 1, 'key2': 2}, typing.Mapping[str, int]) {'key1': 1, 'key2': 2}
Coerce the input to a dataclass of a valid shape:
>>> import dataclasses >>> @dataclasses.dataclass ... class Data: ... key: str ... key2: int = 4 ... >>> validobj.parse_input({'key': 'Hello'}, Data) Data(key='Hello', key2=4)
Find a list item that does not conform to the specification:
>>> import typing >>> try: ... validobj.parse_input([1,2,'tres'], typing.List[int]) ... except validobj.ValidationError as e: ... e.wrong_index ... 2
validobj.errors module
The errors
module defines the exceptions raised by
validobj.validation.parse_input()
function. These are aleways
subclasses of ValidationError
.
- exception validobj.errors.ValidationError
Bases:
Exception
Exception raised when validation cannot be performed for any reason.
- exception validobj.errors.WrongTypeError
Bases:
ValidationError
,TypeError
Exception raised when some input is of the wrong type.
- exception validobj.errors.WrongKeysError(missing, unknown, valid, header='')
Bases:
MismatchError
Error raised when the keys provided by the input do not match those required by the specification.
- exception validobj.errors.NotAnEnumItemError(bad_item, enum_class)
Bases:
AlternativeDisplay
,ValidationError
,ValueError
Exception raised when a string input is not an Enum name.
- exception validobj.errors.WrongFieldError(*args, wrong_field, **kwargs)
Bases:
ValidationError
Exception raised when some field (e.g. in a mapping or dataclass) cannot be processed correctly.
- Parameters:
wrong_field (Any) – The key in the input mapping that caused the error.
Notes
The
__cause__
attribute of the exception will contain the underlying reason for the error.
- exception validobj.errors.WrongListItemError(*args, wrong_index, **kwargs)
Bases:
ValidationError
Exception raised when some item in a list cannot be processed correctly.
- Parameters:
wrong_index (int) – The index in the list that caused the error.
Notes
The
__cause__
attribute of the exception will contain the underlying reason for the error.
- exception validobj.errors.UnionValidationError(*args, causes, **kwargs)
Bases:
ValidationError
Exception raised when value cannot be coerced to any of the members of an union.
- Parameters:
causes (List[ValidationError]) – A list of
ValidationError
exceptions containing the failure for each of the members of the union.
validobj.custom module
Tools for custom validation of types. Works with Python 3.9 only.
- class validobj.custom.InputType(type: Type)
Bases:
object
A wrapper over an input type, for use in the custom processing.
- Parameters:
type (Type) – The wrapped type.
- class validobj.custom.Validator(func: Callable)
Bases:
object
A wrapper over a validation function, for use in the custom processing.
- Parameters:
func (Callable) – The wrapped function.
- validobj.custom.Parser(func: Callable[[Any], T]) Type[T]
Read the type annotations of
func
and return atyping.Annotated
with the function’s return type as the set type and the requisite metadata so thatfunc
is used byvalidobj.parse_input()
.- Parameters:
func (Callable) – The wrapped function. It should have one positional parameter. If the parameter is annotated, Validobj will cast the input consitently with the annotation before presenting it to the function.
- Returns:
annotated – Annotation of the return type of the function with two metadata parameters:
InputType
with the type annotation of the first parameter andValidator
with the function itself.- Return type:
typing._AnnotatedAlias
Examples
Add support for
decimal.Decimal
.>>> import typing >>> import decimal >>> from validobj import parse_input, ValidationError >>> from validobj.custom import Parser >>> def to_decimal(inp: typing.Union[str, int, float]) -> decimal.Decimal: ... try: ... return decimal.Decimal(inp) ... except decimal.InvalidOperation as e: ... raise ValidationError("Invalid decimal") from e ... >>> Decimal = Parser(to_decimal) >>> print(Decimal) typing.Annotated[decimal.Decimal, InputType(typing.Union[str, int, float]), Validator(<function to_decimal at ...>)] >>> parse_input(0.5, Decimal) Decimal('0.5')