Another JSON schema validator :)
Project description
Schema checker
Another schema validator :)
Features:
- Can validate any dict object (not only json)
- Very customizeble
Tutorial
Base validation function:
def validate(obj: dict, schema: dict) -> dict:
...
where
obj - some object
schema - json_validator
key is name of top-level object (or None) ; (for log)
schema ::= type of this object : list/dict/str/int/float or "const"
OR
schema ::= dict - {
type : type of this object : "list/dict/str/int/float or "const"
"value" : need for obj type of
- list - is schema for all elements in list
- dict - dict[key -> schema]
- const - list or set (or iterable) of allowed values
"any_key" : need for obj type of dict - schema for all keys (ignores if value is set)
"default" : default value if this object does not exists (if callable will be called)
"filter" : function value -> bool - if false then raise error
"pre_call" : function value -> value - will be called before cheking filter and value
"post_call" : function value -> value - will be called after cheking filter and value
"blank" : raise error if value is blank
"max_length" : extra check of length (len)
"min_length" : extra check of length (len)
"unexpected" : allow unexpected keys (for dict)
}
Extras
decorator_constructor
def decorator_constructor(getter, setter)
getter
must:
- take same args as the function that'll be decorated
- return dict for the schema validator
setter
must:
- take 3 args: validated dict, source positional args as tuple, sourse keyword args as dict
- return tuple and dict for positional and keywords args for the function tha'll be decorated
returns parameterized decorator, that expects schema
kw_validator
def kw_validator(schema)
Validate only keyword args and ignores all positional This decorator is the result of decorator_constructor
Examples
from datetime import datetime, timedelta
from schema_checker import validate, kw_validator
validate(
obj='12345',
schema={'type': str},
) # result: '12345'
validate(
obj=12345,
schema={'type': str},
) # raise ValueError
validate(
obj={'some_key': 10},
schema={
'type': dict,
'value': {
'some_key': {
'type': int,
'filter': lambda x: x < 5,
},
}
},
) # raise ValueError
validate(
obj='10.12.19',
schema={
'type': datetime,
'pre_call': lambda x: datetime.strptime(x, '%d.%m.%y'),
'filter': lambda x: (datetime.today() - timedelta(year=1)) <= x <= datetime.today(),
},
) # result: datetime.datetime(2019, 12, 10, 0, 0)
@kw_validator({'type': dict, 'values': {'a': str}})
def func(a):
return a
func(123) # ok
func('123') # ok
func(a='123') # ok
func(a=123) # raise ValueError
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
schema_checker-0.9.tar.gz
(5.0 kB
view hashes)
Built Distribution
Close
Hashes for schema_checker-0.9-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | dcb91fdad104404b203da868e995b000a1f70621ce313f545863420744af7b23 |
|
MD5 | 228a5b567035473097360efb760c0350 |
|
BLAKE2b-256 | 6d476ea1a0f81ed03367a4a1a1941012909b25c12b0186cb47400e4d4e45a9c2 |