用于json/yaml验证方案的python lib/cli

bfabio.pykwalif的Python项目详细描述


#pykwalify

yaml/json验证库http://sourceforge.net/projects/kwalify/files/kwalify java/0.5.1/


最新版本的源代码可以在以下网址找到:https://github.com/sunaku/kwalify。请注意,源代码不是最初的作者代码,而是Ruby中最新版本的fork/upload。

` json和yaml格式都受支持。

``yaml
-foo
-bar
`````

schema.yaml
```



它显示了许多示例,说明了所有关键字和类型在实践中是如何工作的,以及它们之间是如何结合的。


可以在这里找到这些文件,它同时显示了将工作的架构/数据组合和将失败的架构/数据组合。

-`tests/files/success/`
-`tests/files/fail/`
-`测试/文件/部分模式/`


开发:

pip install-e.[ruamel]'
```


`pyyaml`仍然是默认的解析器,因为它使用得更多它仍然被认为是python世界中默认的"yaml"解析器。

在python 2.7.x上运行pykwalify,然后尝试将此环境变量添加到执行中

````
pythonionecoding=utf-8 pykwalify…
````

,这可能有助于对所有字符串对象强制使用utf-8编码。如果这不起作用,请打开可用于跟踪源代码中问题的架构和数据的问题。




3.7
source https://github.com/grokzen/pykwalify
docs(最新版本)http://pykwalify.readthedocs.io/en/master/
docs(不稳定分支)http://pykwalify.readthedocs.io/en/unstable/
gitter(免费聊天)[![Gitter](https://badges.gitter.im/join chat.svg)](https://gitter.im/grokzen/pykwalify?utm_source=badge&utm_medium=badge&utm_campaign=pr badge&;utm_content=badge)
changelog https://github.com/grokzen/pykwalify/blob/unstable/docs/release-notes.rst
升级说明https://github.com/grokzen/pykwalify/blob/unstable/docs/upgrade-instructions.rst
问题|https://github.com/grokzen/pykwalify/issues
travis(master)[![构建状态](https://travis-ci.org/grokzen/pykwalify.svg?branch=master)(https://travis-ci.org/grokzen/pykwalify)https://travis-ci.org/grokzen/pykwalify
travis(不稳定)[![构建状态](https://travis-ci.org/grokzen/pykwalify.svg?分支=不稳定](https://travis-ci.org/grokzen/pykwalify)https://travis-ci.org/grokzen/pykwalify
;测试覆盖率[![覆盖状态](https://coveralls.io/repos/grokzen/pykwalify/badge.png?branch=master)"(https://coveralls.io/r/grokzen/pykwalify)https://coveralls.io/github/grokzen/pykwalify
pypi;https://pypi.python.org/pypi/pykwalify/
open hub https://www.openhub.net/p/pykwalify
license'mit`https://github.com/grokzen/pykwalify/blob/unstable/docs/license.rst
版权`版权(c)2013-2017 johan andersson`
git repo `git clone git@github.com:grokzen/pykwalify.git`
安装stable `pip install pykwalify`
安装dev `$git clone git@github.com:grokzen/pykwalify.git pykwalify`<;br>;`$cd./pykwalify`<;br>;`$virtualenv.venv`<;br>;`$source.venv/bin/activate`<;br>;`$pip install-r dev requirements.txt`<;br>;`$pip install-e.`
必需依赖项`docopt>;=0.6.2 `<;br>;=2.4.2 `;=2.4.2 `;
支持的yml语法分析器`` pyyaml>;=3.11 `<;br>;`ruamel.yaml>;=0.11.0 `;




《发行说明》发布说明
======br/>




======br/>
>1.6.0(2017年1月22日)1.6.0(2017年1月22日)1.6.6.0(2017年1月22日)1

=========>新关键字:

-添加对关键字的支持*示例*。它什么也不做,也没有对它进行验证。
-添加对关键字*版本*的支持。它什么也不做,也没有对其进行验证。
-添加对关键字*日期*的支持,并添加对关键字*格式*的支持。这可用于验证许多不同类型的*datetime*对象。
-添加对关键字*length*的支持。它与*range*非常相似,但主要工作于字符串类型。
-添加对关键字*assert*的支持。它通过运行python代码*assert<;assert expr>;*并检查是否引发任何异常。
此功能被视为危险,因为只有简单的逻辑可防止从验证中转义。

错误修复:

-修复了一个错误,其中映射中标记为"必需"的正则表达式被匹配为字符串,而不是正则表达式。
-修复了当架构指定一系列映射对象时类型验证不起作用的错误。它现在输出一个正确的"…不是dict…"错误。
-修复了当它试图在数据中查找的键不存在时,*unique*验证中的错误。
现在它忽略了它没有找到任何值,因为缺少的值不会影响验证。
-修复了当规则值被验证为布尔值时,关键字*ident*。它现在只接受预期的*布尔*值。
-修复了一个错误,如果*allowEmpty*是在序列类型内的映射类型中指定的,则它将无法正确验证。
-修复了一个错误,加载的扩展不总是在复杂的嵌套对象中工作。
-修复了一个主要的非常嵌套的*seq*架构中的错误,如果架构需要另一个*seq*,但该值是其他值,则不会将其作为验证错误引发。
现在已修复此问题,并引发正确的错误。
-修复了使用include指令时在所有情况下都不起作用的错误在映射块中的键中。


新功能:

-现在可以在使用映射时指定默认规则。
如果找不到其他键,则将使用该规则。
这是原始Kwalify实现中缺少的功能的端口。
-添加了新功能helper method*keywords*to*rule*类,可以输出任何*rule*对象的所有活动关键字。
这有助于在调试代码时轻松转储任何*rule*对象的所有活动关键字。
-添加了新的cli标志*--严格的规则验证*它将验证所有使用的所有*rule*对象中的关键字只使用每个定义类型支持的规则。
如果只使用*core*对象,则在创建*core*对象实例。
此功能在此版本中是可选的,但在*releases>;=1.7.0*
-添加了新的cli标志*--修复ruby风格的regex*,该标志将从ruby风格的regex/模式中删除斜杠。
当使用该标志时,在运行验证之前,第一个和最后一个*/*将被删除。
如果只使用*core*对象,则将*fix_ruby风格的regex设置为true*在创建*core*对象实例时,
默认行为仍然是应该使用python样式的regex值,但是在某些情况下,当您无法更改架构时,此标志可以帮助您。
-添加了新的cli标志*--允许断言*,它将启用其他被阻止的关键字*assert*
引入此标志是为了使pykwalify在没有用户控制的情况下不会断言断言。
默认行为是引发一个*coreerror*is assertion is used but not allowed显式。
如果只使用*core*对象,则在创建*core*对象实例。

它导致python 2.7.x上的*jypiter notebooks*出现问题
在自述文件中添加了有关建议的解决方案的文档,如果默认解决方案不起作用,则使用*pythonionecoding=utf-8*。
-验证不再继续处理诸如*pattern*、*regex*、*timestamp*、*range之类的事情*如果类型检查失败,则执行其他检查。这可能会导致一些问题,当
的类型检查失败时,先前的错误最初将被消音,但在类型检查被修复时再次出现。(sbrunner)
-在执行regex验证时捕获*typeerror*。当值不是可分析的字符串类型时会发生这种情况。
-即使架构中未指定映射关键字,也会检查该值是否是有效的dict对象。
这会使检查更为迫切,并且错误可能与以前不存在的错误相同。
-更改了SANE如果未将该键定义为*str*,则为默认类型。在此之前,每次都必须定义类型,而默认类型没有按预期工作。
这是一个重大更改,可能会导致验证失败或停止失败,具体取决于情况。
-更改了是否需要值以及列表中的值是否为*无*。它现在添加一个普通的验证错误,而不是引发一个*coreerror*
-关键字*desc*now*的值必须*是字符串,否则将引发一个*ruleerror*。
-关键字*example*now*的值必须*是字符串,否则将引发一个*ruleerror*。
-关键字*name*now*的值必须*是将引发字符串或*ruleerror*。

一般更改:

-直接从*kwalify*测试数据(*test-validator.yaml->;30f.yaml&;43s.yaml*)这样,这个库就可以更加确信规则的实现方式与*kwalify*
-重构的*test_core_files*方法相同,现在可以接受包含多个文档的测试文件。该方法现在尝试从每个测试文件中读取所有文档,并分别运行每个文档。
它现在可以更详细地报告哪些文件和文档未通过测试,以便更容易地跟踪问题。
-现在要根据什么对测试文件进行主要重构他们正在测试,而不是增加一个不代表任何内容的计数器。
更容易找出哪些关键字缺少测试,哪些关键字有足够的测试。



1.5.2(11月12日,2016)将所有文档转换为readthedocs有关
pyyaml被弃用的更多详细信息,请链接https://bitbucket.org/xi/pyyaml/issues/59/has-this-pproject已被放弃
pyyaml仍可以在下一个主要版本(1.6.0)中使用,但在发行版(1.7.0)中和以后的版本中被删除。
-ruamel.yaml现在可以使用以下命令安装,用于本地开发*pip install-e'.[ruamel]'*
和生产,使用*pip install'pykwalify[ruamel]'*
-ruamel.yaml现在在pyyaml之前使用,如果安装在系统上
-修复了标量类型未正确验证的错误。
-取消固定所有依赖项,但仍保持每个库的最低版本
-允许混合regex和normal匹配字符串时的关键字(jmacarthur)



1.5.1(3月6日,2016年)
----

-改进文档(scottlowe)。
-通过将规则类中的私有变量重写为属性来改进代码linting,并更新所有使用旧方法的代码。
-通过重写所有日志消息来改进代码linting,以呈现根据PEP标准。
(使用%s并将变量作为位置参数传入)
-在验证序列和值时修复错误,仅当字符串
-改进时间戳的验证。
-改进浮点验证以现在接受有效的字符串例如,使用科学符号"1e-06"的int。
-更新travis以测试python 3.6



>1.5.0(2015年9月30日)
----


-float/number type现在支持范围限制
-非数字类型的范围(例如seq,string)现在需要非负。
-修复了当regex匹配规则"any"和"all"都发现
regex匹配失败的关键字时触发的编码错误。在
regex匹配失败期间,添加了故障单元测试以涵盖regex匹配规则"any"和"all"。已更新允许的规则列表以包含匹配规则"all"。
-已将"验证"映射方法从"使用重新匹配"更改为"重新搜索"。这修复了与使用匹配规则"any"的多关键字regex相关的错误。将成功单元测试添加到测试默认值、'any'、
和'all'匹配规则。



1.4.1(2015年8月27日)
————————————————————————————————————————————————————————————————————————此版本中没有代码更改。



1.4.0(2015年8月4日)
----

-由于python 3.2中不存在unicode文本,因此放弃了对python 3.2的支持。
-固定日志记录&;在架构/数据/文件名中使用Unicode字符时引发异常。
-重新处理了所有Ruleerror异常,以便现在有更好的异常消息。
-Ruleerror异常现在有一个唯一的"error\u key",可以更容易地标识它是什么错误。
-Ruleerrors的路径已作为变量移动到异常内部。
-重写所有schemaConflict异常以提高可读性。



1.3.0(2015年7月14日)
---------

-重写大多数错误消息以提高可读性。请参阅"docs/upgrade instructions.md"
了解更多详细信息。
-现在可以使用针对每个验证错误引发的异常。它可以
在变量"c.validation\u errors\u exceptions"中找到。它们包含有关错误的更详细信息




1.2.0(2015年5月19日)
---------

-此功能是新的和实验性的。
实现了对序列中多个值的支持。
这将允许对不同类型的一个序列可以包含。您可以要求
序列中的每个值对所有不同的可能性都是有效的。
测试表明它仍然保持与所有旧模式的向后兼容性,但不能保证它是有效的。
如果您在此版本中发现回归,请提交一个错误报告以便尽快修复。
-此功能是新的和实验性的。
添加了定义可用于自定义python c的python文件的功能可以对所有类型调用的ode/函数,以便可以对所有数据结构执行自定义/额外验证。
-添加新的关键字"func",该关键字是字符串,用于指向通过扩展系统加载的函数。
-添加新的关键字"extensions",该关键字只能在架构的顶层。它应该是一个列表,包含扩展系统应该加载的文件字符串。路径可以是相对路径,也可以是绝对路径。
-新的cli选项'-e file'或'-extension file'可用于从cli加载扩展文件。
-修复了类型未正确引发异常的错误。如果schema说它应该是一个映射,但数据是
序列,则在早期版本中不会引发验证错误,但现在它会引发"notsequenceerror"或
"notmappingerror"。



1.1.0(2015年4月4日)
----

-重做docopt使用的cli字符串。删除了docopt提供的冗余标志[--version&;--帮助]
-添加对时间戳验证的支持
-添加用于验证时间戳的新运行时依赖项"python dateutil"
-更改如何实现"any"关键字,以便现在接受任何内容,而不仅仅是实现的类型。(有关迁移的详细信息,请参阅升级说明文档)




1.0.1(2015年3月8日)
----


切换回该库的语义版本编号。

-在"15.01"发布后,版本架构从<;year>;<;month>;更改回来;样式版本架构返回语义版本名。此更改的一个大问题是"pypi"无法很好地处理对语义名称的更改,因此我不得不从pypi中删除旧版本,并将其替换为单个版本"1.0.1"。
-无论您使用的是什么版本,都应考虑升级到"1.0.1"。这两个版本之间的差异非常小,主要包含错误修复和添加的改进。
-旧版本仍然可以从"github.com"获得,如果您真的需要旧版本,可以将下载URL添加到"requirements.txt"文件中。




15.01(1月2015年12月17日)修正了映射密钥唯一性验证中的一个错误[参见:pr-12](gonditeniz)





14.12(12月24日,2014)
---------

-修复了映射键上的断开正则表达式匹配。
-现在可以加载以文件结尾的源文件`.yml`了
-在某些指令中添加别名,使写入
*`sequence`-->;`seq`
*`mapping`-->更容易/更快;`映射`
*`Required`-->;`Req`
*`Regex`-->;`Re`
-重写所有测试文件以减少文件数




<14.08(2014年8月24日)
----

-要上载到PYPI的第一个版本
-关键字"range"现在可以应用于映射和序列类型。
-添加了更多的测试文件。
-删除了关键字"length",因为"range"现在可以处理所有情况。
-关键字"range"现在正确地将内部键检查为整数
-测试的主要更新和增加的覆盖范围。




14.06.1(6月24日,2014年)新功能"部分模式"。定义一个小模式,该模式的id可以在模式中的其他位置重用。有关详细信息,请参阅自述文件。
-用于在指定位置包含部分架构的新指令"include"。
-cli和core()现在可以处理多个架构文件。
-指令"pattern"不能再与map一起用于根据该regex验证所有密钥。使用"regex;"inside"映射:"
-"none"现在可以用作类型
-添加了更多测试





14.06(6月7日,2014年)
----

-新版scheme[yy.mm(.minor release)]
-增加了travisci支持
-将运行时依赖项docopt更新为0.6.1
-将运行时依赖项pyyaml更新为3.11
-日志的巨大重构以及如何它起作用了。日志配置文件现在被删除,一切都变得更加简单
-清除docopt现在处理的一些检查
-new keyword"regex;<;regex pattern>;",这些检查可以用作映射中的键,以便在验证映射键时提供更大的灵活性
-可以使用的新关键字"匹配规则"要控制如何匹配密钥,请添加python 3.4&;python 2.7支持(请参阅travisci测试了解状态)
-放弃了python 3.1支持
-很多测试代码的重构。
-测试现在应该使用"notests"而不是"python runtests.py"来运行
-重构了很多更具体的异常(schemaerror和ruleerror for示例)而不是一般异常
-已分析的规则现在已正确存储在core()中,因此可以从外部对其进行测试



>0.1.2(2013年1月26日)
----


-添加了新的和实验性的验证规则allowEmpty。(有关更多信息,请参阅自述文件)
-添加了Todo跟踪文件。
-重新编写了cli,现在使用docopt和removede argparse。
-实现了更多类型检查、浮点、数字、文本、any
-现在支持python 3.3.x
-不再支持任何python 2.x.y版本的映射规则模式。它允许验证该映射中的所有键。(有关更多信息,请参阅自述文件)
-更多测试文件,现在测试core.py的源数据和模式数据输入参数
-测试套件中的许多清理





0.1.1(1月21日,2013年)
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————项目根目录的路径必须在python路径中,建议创建一个virtualenv并在激活时导出正确的路径)
-新的make目标"cleanegg"
-makefile中的固定路径错误
-manifest中的固定路径错误




0.1.0(1月20日,2013年)
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————对下一个版本的功能请求。有些目前尚未实现,可以通过输出中的[NYI]标记、文档和代码找到。
-可通过PIP安装(不是正式的在线PIP repo,而是来自此repo中的releases文件夹)
-支持yaml&;如果在lib模式下使用,则来自cli的json文件和任何dict/list数据结构。
-使用pythons内部日志功能,可以通过更改logging.ini(python 3.1.x)或logging.yaml(python 3.2.x)来更改默认日志输出,或者使用-v cli输入参数更改日志记录级别。如果在lib模式下,它使用您实现的python std日志记录。

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

推荐PyPI第三方库


热门话题
java如何在安卓中通过程序禁用消息通知?   Java中的jna处理器乘法器   java Im将图像存储在数据库中,但被替换   java REST到SOAP头   web服务如何在java中使用web服务?   java如何在从Rest控制器返回对象层次结构时使用SpringMVC@JsonView   java SpringApplicationBuilder在与JUnit SpringRunner的集成测试期间未加载   java当您超出“短”范围时会发生什么?   java如何在同一类中的方法中调用构造函数?   java创建不必要的字符串对象   java httpClient连接池管理器validateAfterInactivity   多线程Java是否提供了一个ExecutorService,允许工人在同一线程上执行?   在Java中使用非字符串值创建MongoDB文档   java addView()不显示该视图   JavaTictactoe字符覆盖   java如何使用spark UDF返回复杂类型   java如何在安卓 studio的弹出窗口中添加带滚动的listView?