Validating Data

Plette provides optional validation for input data. This chapter discusses how validation works.

Setting up Validation

Validation is provided by the Cerberus library. You can install it along with Plette manually, or by specifying the “validation” extra when installing Plette:

pip install plette[validation]

Plette automatically enables validation when Cerberus is available.

Validating Data

Data is validated on input (or when a model is loaded). ValidationError is raised when validation fails:

>>> plette.models.Source({})
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "plette/models/base.py", line 37, in __init__
    self.validate(data)
  File "plette/models/base.py", line 67, in validate
    return validate(cls, data)
  File "plette/models/base.py", line 27, in validate
    raise ValidationError(data, v)
plette.models.base.ValidationError: {}

This exception class has a validator member to allow you to access the underlying Cerberus validator, so you can know what exactly went wrong:

>>> try:
...     plette.models.Source({'verify_ssl': True})
... except plette.models.ValidationError as e:
...     for error in e.validator._errors:
...         print(error.schema_path)
...
('name', 'required')
('url', 'required')

See Ceberus’s error handling documentation to know how the errors are represented and reported.