Maps#
For dictionaries with consistent key/value types, you can use MapValidator
.
from koda_validate import (MapValidator, StringValidator, IntValidator, KeyValErrs, MapErr,
MinKeys, MaxKeys, Valid, Invalid, PredicateErrs, TypeErr)
validator = MapValidator(key=StringValidator(),
value=IntValidator(),
predicates=[MinKeys(1), MaxKeys(3)])
assert validator({"a": 1, "b": 2}) == Valid({'a': 1, 'b': 2})
assert validator({}) == Invalid(PredicateErrs([MinKeys(1)]), {}, validator)
assert validator({"a": "not an int"}) == Invalid(
MapErr({'a': KeyValErrs(key=None,
val=Invalid(TypeErr(int), 'not an int', IntValidator()))}),
{'a': 'not an int'},
validator
)
Mypy will infer that the type of valid data returned from validator
above will be
Dict[str, int]
.