kohi 0.4.0
kohi
A powerfull schema validator
Instalation
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 .
Quickstart
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']
Validators
kohi.base.BaseSchema
Only one base class for all schema validators
kohi.number.NumberSchema
or kohi.NumberSchema
kohi.string.StringSchema
or kohi.StringSchema
kohi.enum.EnumSchema
or kohi.EnumSchema
kohi.dictionary.DictSchema
or kohi.DictSchema
Methods
BaseSchema
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 thrown
add_mutation(): Self
Add a mutation function than will run after the validate method. P.S. Will only be executed in the parse method
parse(data): typeof data
Run the validate method, the mutations and return a deep clone of data
default(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
NumberSchema
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)
StringSchema
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
EnumSchema
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
DictSchema
inherits from BaseSchema
props(**props): Self
Defines the structure of the dictionary in the format [key]: ClassValidator
Dev env
install development dependencies
check types using mypy
run all tests using pytest
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.