python的json验证框架。

incoming的Python项目详细描述


incoming是一个json验证框架。

Build StatusCoverage Status

概述

验证任何东西都会变得非常混乱。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公开发布来稿。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
在Eclipse中使用多个调用在一行上打印java   javajackson序列化问题。只有同一实体的第一个对象可以很好地序列化   Java中Deflate函数的等价充气   使用customlitview的java Android actionbar搜索   java“<T>T get()”是什么意思?(它有用吗?)   目标c使用CommonCrypto使用AES256加密,使用OpenSSL或Java解密   java在运行时更新资源文件   fileinputstream在java中访问并将数据写入现有文件   带集群的java Android Mapbox我希望每个功能都有不同的标记图像   java JDK8>JDK10:PKIX路径生成失败:SunCertPathBuilderException:找不到请求目标的有效证书路径   java使用Hk2生成具有指定构造函数参数的实例   为什么这个系统。出来Java中的println()打印到控制台?   java目录和文件名连接不起作用   使用mockito和通配符绘图的java