基于colander模式的内容类型系统。
limone的Python项目详细描述
以声明方式创建内容类型
可以使用 装饰工。以下面的colander模式为例, 摘自Colander文档:
import colander class Friend(colander.TupleSchema): rank = colander.SchemaNode(colander.Int(), validator=colander.Range(0, 9999)) name = colander.SchemaNode(colander.String()) class Phone(colander.MappingSchema): location = colander.SchemaNode(colander.String(), validator=colander.OneOf(['home', 'work'])) number = colander.SchemaNode(colander.String()) class Friends(colander.SequenceSchema): friend = Friend() class Phones(colander.SequenceSchema): phone = Phone() class Person(colander.MappingSchema): name = colander.SchemaNode(colander.String()) age = colander.SchemaNode(colander.Int(), validator=colander.Range(0, 200)) friends = Friends() phones = Phones()
生成 person 内容类型的最简单方法是添加 limone.content\u模式 decorator:
import colander import limone ... <elided for brevity> @limone.content_schema class Person(colander.MappingSchema): name = etc...
然后可以用通常的方式创建person实例:
jack = Person( name='Jack', age=52, friends=[ (1, 'Fred'), (2, 'Barney') ], phones=[ {'location': 'home', 'number': '555-1212'}, ])
为属性分配值将触发colander架构验证。为了 例如,当 300 的值分配给 年龄时: :
jack.age = 300
a colander.invalid 引发异常:
colander.Invalid: {'age': u'300 is greater than maximum value 200'}
实例化内容类型时,所有必需属性的值必须为 提供:
fred = Person()
提高:
colander.Invalid: {'age': u'Required', 'name': u'Required'}