Skip to main content

Validate like a Maat

Project description

Maat

Build Status Coverage Status Downloads

Maat is an easily extensible transformation and validation library for Python. Built for corner cases and speed.

The project is named after the ancient Egyptian god Maat. Her scale was used to weigh the heart as described in the book of the dead.

Since Maats scale is magical, it not only validates values, it can transform them too.

Maat does dictionary-to-dictionary validation and transformation. From those two dictionaries a new dictionary is created. Each value of the dictionary to be validated is passed through their validation and transformation functions.

Examples

This validates that input name is of type str and is either 'John Doe' or 'Jane Doe'. Throws Invalid exception when validation fails. Maat has a fail fast policy.

    >>> from maat import validate
    >>> user = {'name': 'John Doe'}
    >>> user_validation = {'name': {'type': 'str', 'choices': ['John Doe', 'Jane Doe']}}
    >>> validate(user, user_validation)
    {'name': 'John Doe'}
    
    >>> validate({'name': 'peter pan'}, user_validation)
    Traceback (most recent call last):
    maat.validation.Invalid: key: "name" contains invalid item "peter pan": not in valid choices ['John Doe', 'Jane Doe']
    
    >>> validate({'name': 42}, user_validation)
    Traceback (most recent call last)
    maat.validation.Invalid: key: "name" contains invalid item "42" with type "int": not of type string
    
    >>>  validate({'user': 'John Doe'}, user_validation)
    Traceback (most recent call last)
    maat.validation.Invalid: invalid keys: user :expected keys: name
    
    >>> validate({'name': 'Jane Doe'}, user_validation)
    {'name': 'Jane Doe'}

    >>> import maat
    >>> @maat.protected(user_validation)
        def create_user(name):
            return "success"

    >>> create_user("peter pan")
    Traceback (most recent call last):
    maat.maat.Invalid: key: "name" contains invalid item "peter pan": not in valid choices ['John Doe', 'Jane Doe']

    >>> create_user("John Doe")
    'success'

Authors

  • Melvin Bijman

License

This project is licensed under the MIT License - see the LICENSE file for details

Note

This project is being used in production by multiple companies.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

Maat-3.0.1.tar.gz (6.0 kB view hashes)

Uploaded Source

Built Distribution

Maat-3.0.1-py3-none-any.whl (6.9 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page