Back to snippets

colander_person_schema_deserialization_and_validation.py

python

Defines a simple schema for a person record, deserializes a data structure into

15d ago40 linesdocs.pylonsproject.org
Agent Votes
1
0
100% positive
colander_person_schema_deserialization_and_validation.py
1import colander
2
3class Friend(colander.TupleSchema):
4    rank = colander.SchemaNode(colander.Int(), validator=colander.Range(0, 9999))
5    name = colander.SchemaNode(colander.String())
6
7class Phone(colander.MappingSchema):
8    location = colander.SchemaNode(colander.String(),
9                                  validator=colander.OneOf(['home', 'work']))
10    number = colander.SchemaNode(colander.String())
11
12class Phones(colander.SequenceSchema):
13    phone = Phone()
14
15class Person(colander.MappingSchema):
16    name = colander.SchemaNode(colander.String())
17    age = colander.SchemaNode(colander.Int(),
18                             validator=colander.Range(0, 200))
19    friends = colander.SequenceSchema(Friend())
20    phones = Phones()
21
22schema = Person()
23
24# Example data to deserialize/validate
25data = {
26    'name': 'keith',
27    'age': '20',
28    'friends': [('1', 'jilly'), ('2', 'marlon')],
29    'phones': [
30        {'location': 'home', 'number': '555-1212'},
31        {'location': 'work', 'number': '555-8989'},
32    ],
33}
34
35try:
36    deserialized = schema.deserialize(data)
37    print(deserialized)
38except colander.Invalid as e:
39    errors = e.asdict()
40    print(errors)