Pythonish object scheme validator
Project description
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
Close
Hashes for pythonish-validator-0.5.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5df6573145bee74fa63585d7fd44a6d8c6ad6f43911220a199952a0975a9c830 |
|
MD5 | 13d29fd915db2f35b7368cf76f5ed73a |
|
BLAKE2-256 | 96f0a0219cd2cb0f080f821c449cb265e85d556e0951a52de70be0fafcb573ae |