Skip to main content

Pythonish object scheme validator

Project description

https://travis-ci.org/bugov/pythonish-validator.svg?branch=master

Data validation library for Python without complex schemas. It’s how you write Python code:

🐍 Works with Python >= 3.7

from re import compile as regex
from pythonish_validator.common import Validator

validator = Validator({
    'name': str,
    'age': int,
    'email': regex(r'^\w+@\w+.\w{2,5}$')
    'skills': [str]
})

validator.is_valid({
    'name': 'Georgy',
    'age': 29,
    'email': 'bugov@cpan.org'
    'skills': ['Python', 'Perl', 'C']
})

What can be easier?

Install

pip3 install pythonish-validator

Error messages

from pythonish_validator.common import validate

validator = validate({
    'name': str,
    'age': int,
    'skills': [str]
}, {
    'name': 'Georgy',
    'age': None,
    'skills': ['Python', 'Perl', 42]
})

assert validator.repr_errors() == [
    "{'age'}->NoneType(None)",
    "{'skills'}->[2]->int(42)"
]

Basic typing module support

Supported types: List, Dict, Optional, Union.

from typing import Dict, List, Optional, Union
from pythonish_validator.common import validate

schema_example = {
    'name': str,
    'age': Optional[int],  # None if undefined
    'skill': Union[str, List[str]],  # Awful API, but who cares...
    'level_by_skill': Dict[str, str]
}

valid_data = {
    'name': 'Georgy',
    'age': None,
    'skill': ['Python', 'ECMA Script'],
    'level_by_skill': {
        'Python': 'senior',
        'ECMA Script': 'middle',
    }
}

validator = validate(schema_example, valid_example)

Features

🗣️ Speak the language of Python classes:

from pythonish_validator.common import Validator


class User:
    __validation_schema__ = {
        'id': int,
        'name': str
    }


validator = Validator({
    "users": [User]
})

# valid structure
validator.is_valid({
    "users": [
        {'id': 1, 'name': 'Alice'},
        {'id': 2, 'name': 'Bob'},
    ]
})

# invalid structure
validator.is_valid({
    "users": [
        {'id': '1', 'name': 'Alice'},
        {'id': 2},
    ]
})

assert validator.repr_errors() == [
    "{'users'}->[0]->{'id'}->str('1')",
    "{'users'}->[1]->{'name'}",
]

🎓 And even custom validation:

import re

from pythonish_validator.common import Validator


class EmailType:
    @staticmethod
    def __validation_schema__(data):
        if not isinstance(data, str):
            return False

        if re.match(r'^\w+@\w+.\w{2,5}$', data) is None:
            return False

        return True


class User:
    __validation_schema__ = {
        'id': int,
        'name': str,
        'email': EmailType,
    }


validator = Validator({
    "users": [User]
})

validator.is_valid({
    "users": [
        {'id': 1, 'name': 'Alice', 'email': 'alice@example.com'},
        {'id': 2, 'name': 'Bob', 'email': 'bob@example.com'},
    ]
})

If you find any mistake – please write to the issue list 🐨 (https://github.com/bugov/pythonish-validator/issues).

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

pythonish-validator-0.5.1.tar.gz (6.3 kB view details)

Uploaded Source

File details

Details for the file pythonish-validator-0.5.1.tar.gz.

File metadata

  • Download URL: pythonish-validator-0.5.1.tar.gz
  • Upload date:
  • Size: 6.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.4

File hashes

Hashes for pythonish-validator-0.5.1.tar.gz
Algorithm Hash digest
SHA256 5df6573145bee74fa63585d7fd44a6d8c6ad6f43911220a199952a0975a9c830
MD5 13d29fd915db2f35b7368cf76f5ed73a
BLAKE2b-256 96f0a0219cd2cb0f080f821c449cb265e85d556e0951a52de70be0fafcb573ae

See more details on using hashes here.

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