dictをparseするコード書いた。

install

$ easy_install tinyschema

demo

from tinyschema.schema import Schema
from tinyschema import fields

class Person(object):
    def __init__(self, name=None, age=None):
        self.name = name
        self.age = age

class PersonSchema(Schema):
    name = fields.string()
    age = fields.integer()

class SuperPersonSchema(PersonSchema):
    skill = fields.noduplicated()

class ParentsSchema(Schema):
    mother = PersonSchema(after_parse= lambda kwargs : Person(**kwargs))
    father = PersonSchema(after_parse= lambda kwargs : Person(**kwargs))

print PersonSchema.parse({"name": "foo",  "age": "10"})
print SuperPersonSchema.parse({"name": "foo",  "age": "10", "skill": ["foo", "bar", "baz", "foo", "bar"]})
params = {"mother": {"name": "foo", "age": "30"}, 
          "father": {"name": "bar", "age": "30"}, 
          }
print ParentsSchema.parse(params)

# {'age': 10, 'name': 'foo'}
# {'skill': set(['baz', 'foo', 'bar']), 'age': 10, 'name': 'foo'}
# {'father': <__main__.Person object at 0x7fd3e0693ad0>, 'mother': <__main__.Person object at 0x7fd3e0693b10>}

追記

## object schema
from tinyschema.schema import ObjectSchema
class PersonSchema(ObjectSchema):
    name = fields.string()
    age = fields.integer()

print PersonSchema.parse({"name": "foo",  "age": "10"})
# <class '__main__.PersonSchema'>: ['age', 'name']
print PersonSchema.parse({"name": "foo",  "age": "10"}).name
# foo
print PersonSchema.parse({"name": "foo",  "age": "10"}).age
# 10

from tinyschema import schema
ParentsSchema = schema.schema_factory("ParentsSchema", ObjectSchema,
                                     mother=PersonSchema(), father=PersonSchema())
print ParentsSchema.parse(params)
# <class 'tinyschema.schema.ParentsSchema'>: ['father', 'mother']