声明性模式框架。
scheme的Python项目详细描述
主页:https://github.com/arterial-io/scheme
scheme是python的声明性通用数据模式框架。它提供了一种定义数据模式的简单方法,通过这些模式,可以在各种数据格式之间进行序列化和非序列化,使用描述性错误处理进行丰富的验证,分层变量插值,以及其他与数据交互的有趣方式。
scheme可用于需要定义和验证的任何传入和传出结构化数据:api、配置文件、复杂的用户输入、工作流和流程用户案例等。
>>>fromschemeimport*>>>fromdatetimeimportdate>>>account=Structure({'name':Text(nonempty=True),'email':Email(nonempty=True),'role':Enumeration('guest user admin',required=True,default='user'),'active':Boolean(required=True,default=True),'interests':Sequence(Text(nonempty=True),unique=True),'logins':Integer(minimum=0,default=0),'birthday':Date(),},name='account')>>>json='{"name": "Johnny Doe", "email": "johnny.doe@something.com","interests":["baseball","basketball"],"birthday":"1980-03-05"}'>>>account.unserialize(json,'json'){'name':'Johnny Doe','email':'johnny.doe@something.com','role':'user','active':True,'interests':['baseball','basketball'],'logins':0,'birthday':datetime.date(1980,3,5)}>>>suzy={'name':'Suzy Queue','email':'suzy.queue@something.com','role':'admin','active':False,'logins':324,'birthday':date(1985,12,2)}>>>print(account.serialize(suzy,'yaml'))active:falsebirthday:1985-12-02email:suzy.queue@something.comlogins:324name:SuzyQueuerole:admin>>>account.unserialize('{}','json')Traceback(mostrecentcalllast):...scheme.exceptions.ValidationError:validationfailed[01]Requiredfielderrorat(structure):accountismissingrequiredfield'name'Field:Structure(name='account',...)[02]Requiredfielderrorat(structure):accountismissingrequiredfield'email'Field:Structure(name='account',...)>>>account.serialize({'name':'Johnny Doe','email':'johnny.doe@something.com','logins':-34},'json')Traceback(mostrecentcalllast):...scheme.exceptions.ValidationError:validationfailed[01]Requiredfielderrorat(structure):accountismissingrequiredfield'active'Field:Structure(name='account',...)[02]Minimumvalueerrorat(structure).logins:loginsmustbegreaterthenorequalto0Field:Integer(name='logins',minimum=0,default=0)Value:-34[03]Invalidvalueerrorat(structure).role:rolemustbeoneof'guest','user','admin'Field:Enumeration(name='role',...)Value:'invalid'
功能
- 简单的声明性模式定义
- 丰富的字段类型集:binary,boolean,date,date time,decimal,email,枚举,float integer,map,object,sequence,structure,text,time,token,tuple,uuid
- 支持各种序列化格式:csv、json、结构化文本、xml、yaml
- 具有描述性错误报告的丰富验证:^ {EM1}$最小/最大长度/值,模式匹配等。
- 分层变量插值
- 模式介导的从任意对象中提取值
- 支持基于模式的对象
- 模式的序列化和非序列化,用于动态用例
得到它
$ pip install -U scheme
要求
python 2.6+或3.3+
许可证
BSD许可。有关详细信息,请参见LICENSE。