python的json验证框架。
incoming的Python项目详细描述
incoming是一个json验证框架。
概述
验证任何东西都会变得非常混乱。json是最常用的 数据交换格式,incoming旨在解决 使用结构和易用性验证json。
incoming是一个用于验证json的小框架。这取决于你在哪里 如何使用。一个常见的用例(以及我写这篇文章的主要原因 framework)正在写入http服务器时验证传入的json。
功能
- 可以为编写结构化验证器而进行子类化的类。
- 基本验证程序(或数据类型),用于执行常见验证,如 字符串、数字、布尔值、列表、嵌套json等。
- 允许扩展验证程序(数据类型)编写自己的验证程序。
- 允许写入用于验证值的可调用项。
- 捕获验证期间的错误并返回完整的错误报告。
- 允许为不同的验证测试失败报告不同的错误 同样的价值。
安装
安装很简单。
pip install incoming
基本用法
importjsonfromdatetimeimportdatefromincomingimportdatatypes,PayloadValidatorclassMovieValidator(PayloadValidator):name=datatypes.String()rating=datatypes.Function('validate_rating',error='Rating must be in between 1 and 10.',)actors=datatypes.Array()is_3d=datatypes.Boolean()release_year=datatypes.Function('validate_release_year',error='Release year must be in between 1800 and current year.',)# validation method can be a regular methoddefvalidate_rating(self,val,*args,**kwargs):returnisinstance(val,int)andval>=1andval<=10# validation method can be a staticmethod as well@staticmethoddefvalidate_release_year(val,*args,**kwargs):returnall((isinstance(val,int),val>=1800,val<=date.today().year,))payload={'name':'Avengers','rating':5,'actors':['Robert Downey Jr.','Samuel L. Jackson','Scarlett Johansson','Mark Ruffalo'],'is_3d':True,'release_year':2012}result,errors=MovieValidator().validate(payload)assertresultanderrorsisNone,'Validation failed.\n%s'%json.dumps(errors,indent=2)payload={'name':'Avengers','rating':11,'actors':['Robert Downey Jr.','Samuel L. Jackson','Scarlett Johansson','Mark Ruffalo'],'is_3d':'True','release_year':9000}result,errors=MovieValidator().validate(payload)assertresultanderrorsisNone,'Validation failed.\n%s'%json.dumps(errors,indent=2)
如果运行上述脚本,您将获得:
Traceback (most recent call last): File "code.py", line 67, in <module> assert result and errors is None, 'Validation failed.\n%s' % json.dumps(errors, indent=2) AssertionError: Validation failed. { "rating": [ "Rating must be in between 1 and 10." ], "is_3d": [ "Invalid data. Expected a boolean value." ], "release_year": [ "Release year must be in between 1800 and current year." ] }
文档
文档可在Read The Docs上找到。
测试
只需运行:
python setup.py test
或:
py.test incoming
许可证
见LICENCE。
麻省理工学院许可证(MIT)
版权所有(c)2013 Vaidik Kapoor
兹免费准许任何人取得 本软件和相关文档文件(“软件”),用于处理 不受限制的软件,包括但不限于 使用、复制、修改、合并、发布、分发、再授权和/或出售 软件,并允许向其提供软件的人员这样做, 必须满足以下条件:
上述版权公告及本许可公告须包括在 软件的拷贝或大部分。
本软件按“原样”提供,无任何形式的保证,明示或 默示的,包括但不限于适销性、适用性的保证 为了特殊目的和不侵权。在任何情况下,作者或 版权持有人应对任何索赔、损害或其他责任负责,无论 在合同诉讼、侵权诉讼或其他诉讼中,由 与软件的连接或软件的使用或其他交易。
更改日志
开发版本
0.3.1
- 使用嵌套json验证器的文档更改。传递嵌套的名称 现在不建议使用类来incoming.datatypes.json。这意味着 内部类的作用域必须正确。Read more here。
0.3.0
- 只将有效负载中字段的错误列表传递给其验证程序方法。
- 将错误和负载作为关键字参数传递。
- 对于不需要且类型为函数的字段,请调用 验证方法/函数,即使有效负载中缺少字段。
0.2.6
- 支持Python3。
0.2.5
- 抽象出只执行python类型检查以减少代码的数据类型。
0.2.4
- 修复Python2.5和2.6的测试。修复自述文件。
0.2.3
- 包设置更改-添加了分类器和清单文件。
0.2.1
- 冷杉ST公开发布来稿。