A powerfull schema validator
Via Poetry:
poetry add kohi
Via PIP:
pip install kohi
Via GitHub (recommended only in dev env):
git clone https://github.com/natanfeitosa/kohi.git && cd kohi && pip install .
To validate a type you can import your schema validator from kohi
or from kohi.<type> import <type>Schema
e.g.
Let's check if a person's date of birth is a positive integer less than the current date — 2023 — and greater than or equal to 2005
from kohi import NumberSchema
# from kohi.number import NumberSchema
n = NumberSchema().int().positive().lt(2023).gte(2005)
print(n.validate(2005)) # True
print(n.validate(2022)) # True
print(n.validate(2004)) # False
print(n.validate(2023)) # False
# You can see the errors generated in the last `validate` call just by accessing the `errors` property
# print(n.errors) # ['number must be less than 2022']
Only one base class for all schema validators
or
kohi.NumberSchema
or
kohi.StringSchema
or
kohi.EnumSchema
or
kohi.DictSchema
add_validator(name, func): Self
Add a custom data validator
validate(data): bool
The method to be called when we validate the schema
reset(): None
Reset error list
throw(): Self
By default no errors are thrown, but when this method is chained a
ValidationError
will be thrownadd_mutation(): Self
Add a mutation function than will run after the
validate
method. P.S. Will only be executed in theparse
methodparse(data): typeof data
Run the
validate
method, the mutations and return a deep clone of datadefault(data): Self
Set a default value for when the validator receives None and you don't want to generate an error
optional(): Self
Allow values None
required(error_message=None): Self
Mark the schema as required. Does not allow values None
inherits from BaseSchema
By default validates int and float
float(): Self
Validate only
float
int(): Self
Validate only
int
lt(num): Self
Validates if the data is less than
num
gt(num): Self
Validates if the data is greater than
num
lte(num): Self
Validates if the data is less than or equal to
num
gte(num): Self
Validates if the data is greater than or equal to
num
min(num): Self
Just an alias for
gte(num)
max(num): Self
Just an alias for
lte(nun)
positive(): Self
Just an alias for
gt(0)
negative(): Self
Just an alias for
lt(0)
nonpositive(): Self
Just an alias for
lte(0)
nonnegative(): Self
Just an alias for
gte(0)
inherits from BaseSchema
min(min_length): Self
Validate if the data len is greater than or equal to min_length
length(length): Self
Validate if the data len equal to length
max(max_length): Self
Validate if the data len is less than or equal to max_length
url(): Self
Validate if the data is an url
uuid(): Self
Validate if the data is a valid uuid
starts_with(text): Self
Validate if the data starts with text
ends_with(text): Self
Validate if the data ends with text
inherits from BaseSchema
one_of(opts): Self
Validate if the data is in opts
not_one_of(opts): Self
Validate that data is different from the values in opts
inherits from BaseSchema
props(**props): Self
Defines the structure of the dictionary in the format
[key]: ClassValidator
- install development dependencies
- check types using
mypy
- run all tests using
pytest