In [1]:
import axon
In [3]:
#@axon.schema("person")
class SchemaPerson:
#
def mapping_factory(self, attrs):
return Person(
schema_profile.factory(attrs["profile"]),
[schema_post.factory(p) for p in attrs["posts"]])
#
def reduce(self, obj):
return axon.mapping("person",
{"profile":schema_profile.reduce(obj.profile),
"posts":[schema_post.reduce(p) for p in obj.posts]})
#@axon.schema("post")
class SchemaPost:
#
def factory(self, args):
return Post(*args)
#
def validate(self, post, context):
return post["date"].year > 1900
#
def reduce(self, obj):
return {"to":obj.to, "text":obj.text, "date":obj.date, "time":obj.time}
#
#@axon.schema("profile")
class SchemaProfile:
#
def factory(self, name, age):
return Profile(name, age)
#
def reduce(self, obj):
return {"name": obj.name, "age":obj.age}
#
In [4]:
text = """
person {
profile: {
name: "Alex"
age: 27
}
posts: [
{to:"Frank" text:"Hello Frank" date:2015-04-20 time:12:23:24}
{to:"Henry" text:"How are you" date:2015-04-20 time:12:26:38}
]
}
"""
In [ ]: