A powerfull schema validator
Via Poetry:
poetry add kohiVia PIP:
pip install kohiVia 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): SelfAdd a custom data validator
validate(data): boolThe method to be called when we validate the schema
reset(): NoneReset error list
throw(): SelfBy default no errors are thrown, but when this method is chained a
ValidationErrorwill be thrownadd_mutation(): SelfAdd a mutation function than will run after the
validatemethod. P.S. Will only be executed in theparsemethodparse(data): typeof dataRun the
validatemethod, the mutations and return a deep clone of datadefault(data): SelfSet a default value for when the validator receives None and you don't want to generate an error
optional(): SelfAllow values None
required(error_message=None): SelfMark the schema as required. Does not allow values None
inherits from BaseSchema
By default validates int and float
float(): SelfValidate only
floatint(): SelfValidate only
intlt(num): SelfValidates if the data is less than
numgt(num): SelfValidates if the data is greater than
numlte(num): SelfValidates if the data is less than or equal to
numgte(num): SelfValidates if the data is greater than or equal to
nummin(num): SelfJust an alias for
gte(num)max(num): SelfJust an alias for
lte(nun)positive(): SelfJust an alias for
gt(0)negative(): SelfJust an alias for
lt(0)nonpositive(): SelfJust an alias for
lte(0)nonnegative(): SelfJust an alias for
gte(0)
inherits from BaseSchema
min(min_length): SelfValidate if the data len is greater than or equal to min_length
length(length): SelfValidate if the data len equal to length
max(max_length): SelfValidate if the data len is less than or equal to max_length
url(): SelfValidate if the data is an url
uuid(): SelfValidate if the data is a valid uuid
starts_with(text): SelfValidate if the data starts with text
ends_with(text): SelfValidate if the data ends with text
inherits from BaseSchema
one_of(opts): SelfValidate if the data is in opts
not_one_of(opts): SelfValidate that data is different from the values in opts
inherits from BaseSchema
props(**props): SelfDefines the structure of the dictionary in the format
[key]: ClassValidator
- install development dependencies
- check types using
mypy - run all tests using
pytest