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']}
Validate data by rule.
Parameters: |
|
---|---|
Raises: |
|
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. |
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: |
|
---|---|
Raises InvalidValueError: | |
If Seq.disallow_empty is True, input data is empty sequence. Otherwise, same as StructureRule. |
Compatible interface for Field and Validator.
Parameters: | value – Validatee value. |
---|---|
Raises InvalidTypeError: | |
Unexpected type (of the value) was given. |
Iterator of rule objects.
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 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')
Identifiers iterator of rules.
Take care that iterator continues infinitely. A recommended usage is to use this method with len().
Dictionary of rules.
Parameters: |
---|
Compatible interface for Field and Validator.
Parameters: | value – Validatee value. |
---|---|
Raises InvalidTypeError: | |
Unexpected type (of the value) was given. |
Iterator of rule objects.
Rule getter that return a rule if key is exists.
Parameters: | key – Rule identifier. |
---|---|
Returns: | A rule. |
Return type: | Same as get(). |
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. |
Update and add rule.
Note
All Validators and Fields are also validation rule.