Structured data validation

class structures.StructuredFields(rule, empty_value=None)

Structured Field set.

Structured means sequence (list, tuple, dict, and more) contains data.

Rule (Field and Validator) should also structured.

Rule is based on Dict and Seq. Dict is correspond to dict, Seq is correspond to sequence types else.

Leaf node of the rule structure have to set Field or Validator.

usage:

>>> import validators
>>> data = {
...   'binary': (0,1)
...   'quaternary': [ 0,1,2,3 ]
... }
>>> stfields = StructuredFields(
...   Dict(
...     binary=Seq(
...       validators.Number(min=0, max=1),
...       type=tuple),
...     quaternary=Seq(
...       validators.Number(min=0, max=3))
...   ),
...   empty_value=None)
>>> stfields(data)
{'binary': (None, None), 'quaternary': [None, None, None, None]}
>>> from fields import BaseField
>>> class BinaryField(BaseField):
...   validator = validators.Number(min=0, max=1)
>>> class QuaternaryField(BaseField):
...   validator = validators.Number(min=0, max=3)
>>> rule = Dict(
...   binary=Seq(
...     BinaryField(required=True),
...     type=tuple),
...   quaternary=Seq(
...     QuaternaryField()
... )
>>> stfields = StructuredFields(rule)
>>> stfields(data)
{'binary': (u'0', u'1'), 'quaternary': [u'0', u'1', u'2', u'3']}
>>> StructuredFields.validate(data, rule)
{'binary': (u'0', u'1'), 'quaternary': [u'0', u'1', u'2', u'3']}
classmethod validate(data, rule, empty_value=None)

Validate data by rule.

Parameters:
  • data – Data structure.
  • rule – A rule set.
  • empty_value – Validator or Field’s empty case value. None is default.
Raises:
  • ValidationError – Error occurred while validation.
  • RequiredError – Field is given empty-value despite required flag is True.
  • ConversionError – Error occurred in Field’s converter. Conversion is failed.
Returns:

Converted data has the same as input data structure. If use Field, to set converted value to a part of return data. But if use Validator, to set None to one.

Rule for data validation

class structures.Seq(*rules, **options)

Sequence of rules.

Get a rule in the order they were given at one time, and endless repeat the pattern.:

>>> rule = Seq(Number(), String())
>>> for i in range(4):
...   type(rule[i])
<class 'fivalid.validators.Number'>
<class 'fivalid.validators.String'>
<class 'fivalid.validators.Number'>
<class 'fivalid.validators.String'>
Parameters:
  • *rulesSeq, Dict, Validators, and Fields.
  • type

    A type of sequence object of validation target.

    Default is list.

  • __disallow_empty

    If this keyword argument is True, do not allow empty sequence as validatee structured data.

    Default is False.

    When used with fields.BaseField.required flag (to instantiate fields.BaseField (or subclass) with required keyword argument; e.g. Field(required=True) ), the __disallow_empty is given priority.

    If __disallow_empty is False (default) and fields.BaseField.required is True, will be check “required” by the Field.

Raises InvalidValueError:
 

If Seq.disallow_empty is True, input data is empty sequence.

Otherwise, same as StructureRule.

__call__(value)

Compatible interface for Field and Validator.

Parameters:value – Validatee value.
Raises InvalidTypeError:
 Unexpected type (of the value) was given.
__iter__()

Iterator of rule objects.

get(ident)

Pattern repeat rule getter.

usage:

>>> rule = Seq(Equal('a'), Equal('b'))
>>> assert rule.get(0) == Equal('a')
>>> assert rule.get(1) == Equal('b')
>>> assert rule.get(2) == Equal('a')
>>> assert rule.get(3) == Equal('b')
>>> assert rule.get(5) == Equal('b')
Parameters:ident – Identifier of rule that accepts integer.
Returns:A rule.
Return type:If leaf node of data, return Validator or Field object. Otherwise, return Seq or Dict.
insert(rule, ident=None)

Insert a rule into rule set.

usage:

>>> rule = Seq(Equal('x'))
>>> rule.insert(Equal('y'))
>>> assert rule[1] == Equal('y')
>>> rule.insert(Equal('z'), 0)
>>> assert rule[0] == Equal('z')
iteridents()

Identifiers iterator of rules.

Take care that iterator continues infinitely. A recommended usage is to use this method with len().

class structures.Dict(*rules, **kwrules)

Dictionary of rules.

Parameters:
  • *rules

    Dict of rules.

    Rules are Seq, Dict, Validators, and Fields.

  • **kwrules

    Rules by keyword argument.

    Argument value is same as *rules.

  • __is_ignore_extra – If this keyword argument is True, to ignore extra data when find unexpected key in validatee structured data.
__call__(value)

Compatible interface for Field and Validator.

Parameters:value – Validatee value.
Raises InvalidTypeError:
 Unexpected type (of the value) was given.
__iter__()

Iterator of rule objects.

__getitem__(key)

Rule getter that return a rule if key is exists.

Parameters:key – Rule identifier.
Returns:A rule.
Return type:Same as get().
get(ident=None)

Rule getter.

If rule dict is not have key ident, will error occur in validation.

Parameters:ident – Key of rule dictionary.
Returns:A rule.
Return type:If rule is leaf node of data, return Validator or Field object. Otherwise, return Seq or Dict.
insert(rule, ident)

Update and add rule.

iteridents()

Note

All Validators and Fields are also validation rule.

Table Of Contents

Previous topic

Converters

This Page