Validating data
You can validate data using different methods for different use cases. Obvious case is to just create an instance of your class with validators defined in it, which we covered in previous sections.
But there’s a few more options to it.
You can inherit some capabilities by subclassing pankoff.base.Container
.
- class pankoff.base.Container
- asdict(dump_aliases=False)
Dump your object do a dict. Dumps only validator fields and aliases.
- Parameters
obj – object to dump
dump_aliases (bool) – if
True
, dump alias fields as well, defaults toFalse
- Returns
dict
>>> Person(...).asdict(dump_aliases=True)
- asjson(dump_aliases=False, **kwargs)
Same as
asdict
, but returns JSON string.- Parameters
dump_aliases – if
True
, dump alias fields as well, defaults toFalse
kwargs – keyword arguments will be propagated to
dumps
- Returns
JSON string
>>> Person(...).asjson(dump_aliases=True, indent=4)
- asyaml(dump_aliases=False, **kwargs)
Dump object to YAML. Works only if PyYAML is installed.
- Parameters
dump_aliases – if
True
, dump alias fields as well, defaults toFalse
kwargs – keyword arguments will be propagated to
dumps
- Returns
YAML string
>>> Person.asyaml(dump_aliases=True)
- dumps(dumps, dump_aliases=False, **kwargs)
Dump current object using provided dumper, e.g
yaml.dump
orjson.dumps
.- Parameters
dumps – callable to use on dump, defaults to
json.dumps
dump_aliases – if
True
, dump alias fields as well, defaults toFalse
kwargs – keyword arguments will be propagated to
dumps
>>> Person.dumps(yaml.dump, dump_aliases=True)
- classmethod extra(**kwargs)
Add extra setup for your class future instances. This way you can create “temporary” objects, a.k.a factories.
>>> fast_person = Person.extra(walk_speed=150) >>> slow_person = Person.extra(walk_speed=10)
>>> yaroslav = fast_person(...) >>> john = slow_person(...)
>>> print(yaroslav.get_extra("walk_speed")) # 150 >>> print(john.get_extra("walk_speed")) # 10
NOTE: extra args set at very beginning of instance setup, before any
__init__
/etcSee example: Making object factories
- Parameters
kwargs – arguments to set on instancee before
__init__
call
- classmethod from_dict(data)
Make on object from dictionary.
- Parameters
data (dict) – dictionary to load
- classmethod from_file(fp, loader=<function load>)
Loads content from file using
loader
and returns validated instance of it.- Parameters
fp – file object
loader – defaults to
json.load
- classmethod from_json(data, loader=<function loads>)
Loads JSON and returns validated instance of it.
- classmethod from_path(path, loader=<function load>)
Reads file at given path and returns validates instance of it. Uses
loader
to load it.- Parameters
path – file path
loader – defaults to
json.load
- classmethod is_valid(data)
Validate data :param data: data to validate :type data: dict
- Returns
True/False
- to_path(path, dump_aliases=False, dumps=<function dumps>, **kwargs)
Dump current instance to a file. :param path: path to dump to :type path: str
- Parameters
dump_aliases – if
True
, dump alias fields as well, defaults toFalse
dumps – callable to use on dump, defaults to
json.dumps
kwargs – keyword arguments will be propagated to
dumps
>>> Person(...).to_path("path/to/data.json", dump_aliases=True, indent=4)
- classmethod validate(data)
Validate data and raise if its invalid.
- Parameters
data (dict) – data to validate
- Raises
ValidationError
Lets validate JSON directly:
>>> from pankoff.base import Container
>>> @autoinit
>>> class Person(Container):
... name = String()
... age = Number(min_value=18)
>>> data = """{"name": "John", "age": 18}"""
>>> obj = Person.from_json(data)
>>> obj.name
"John"
>>> obj.age
18
Besides that, there’s 2 more method, validate
and is_valid
.
>>> Person.validate({"name": "Carl", "age": 17})
Traceback (most recent call last):
...
pankoff.exceptions.ValidationError: ['Attribute `age` should be >= 18']
>>> Person.is_valid({"name": "Carl", "age": 17})
False
There’s also from_dict
method, e,g Person.from_dict({...})
.
Validation errors
- class pankoff.exceptions.ValidationError(errors)
- Parameters
errors – a list of errors