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 to False

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 to False

  • 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 to False

  • 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 or json.dumps.

Parameters
  • dumps – callable to use on dump, defaults to json.dumps

  • dump_aliases – if True, dump alias fields as well, defaults to False

  • 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__/etc

See 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 to False

  • 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