限制性口述
kanagata的Python项目详细描述
提供提取的dict(collections.userdict的子类)。
如何使用
(待办事项:说明)
models.py
fromkanagataimportRestrictionBuilder# group: name, users# user: name, age, Option[skills], Option[school]# skill: namewithRestrictionBuilder()asb:withb.define_dict("Group")asgroup:group.add_member("name",required=True)group.add_list("users","User",required=True)withb.define_dict("User")asuser:user.add_member("name",required=True)user.add_member("age",required=True)user.add_dict("school","School",required=False)user.add_list("skills","Skill",required=False)withb.define_dict("Skill")asskill:skill.add_member("name",required=True)withb.define_dict("School")asschool:school.add_member("name")school.add_list("groups","Group",required=True)
frommodelsimportUser# user can have only name, age, skills. (skills is optional)user=User(name="foo",age=20,skills=[])print(user)# {'name': 'foo', 'age': 20, 'skills': []}try:user2=User(name="bar")# ValueError: User: required fields {'age'} are not foundexceptValueError:passtry:user["xxx"]="bar"# ValueError: User: unsupported field 'xxx', field members=['name', 'age', 'school', 'skills']exceptValueError:pass# user.skills can have only name.user["skills"].append({"name":"math"})print(user)# {'skills': [{'name': 'math'}], 'age': 20, 'name': 'foo'}try:user["skills"].append({})# ValueError: Skill: required fields {'name'} are not foundexceptValueError:pass
0.0.1
- 默认选项支持