Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I customize error messages of Cerberus?

I want to localize the error messages Cerberus returns, e.g. I'd like to achieve the following:

>>> validator.schema = {'animal': {'forbidden': ['Einhorn']}}
>>> validator({'animal': 'Einhorn'})
False
>>> validator.errors
{'animal': ['VERBOTEN!']}  # instead of 'unallowed value Einhorn'
like image 885
funky-future Avatar asked Feb 02 '26 02:02

funky-future


1 Answers

You can simply subclass the default error handler BasicErrorhandler from the cerberus.errors module and adjust the message templates as you like:

>>> class CustomErrorHandler(errors.BasicErrorHandler):
...     messages = errors.BasicErrorHandler.messages.copy()
...     messages[errors.FORBIDDEN_VALUE.code] = 'VERBOTEN!'
...     
>>> validator = Validator(schema, error_handler=CustomErrorHandler)
>>> validator({'animal': 'Einhorn'})
False
>>> validator.errors
{'animal': ['VERBOTEN!']}

Have a look at the source code for available error codes and template variables.

like image 126
funky-future Avatar answered Feb 03 '26 17:02

funky-future