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

pykwalif的Python项目详细描述


"PykWalime
By/> YAML/JSON验证库
< BR/>此框架是一个具有许多附加功能的端口,它的框架是KWALIDY的Java版本,可以在http://www-kuaWaLab./kWalTiel/
中找到。http://SooCuff.NET/Studio/KWALITION/Frase/KWALIDIVA/JAVA/0.5.1//BR/> BR/>已使用的最新版本的源代码可以在http://Github. COM/SunaKu/KWalTiet中找到。请注意,源代码不是最初的作者代码,而是ruby中最新版本的fork/upload。

` json和yaml格式都受支持。

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

schema.yaml
```



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


可以在这里找到这些文件,并显示将工作且将失败的架构/数据组合。

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


开发:

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

`ruamel.yaml`将被使用,但如果两者都被安装,因为它是最新的,并且包含了"pyyaml"不支持的yaml 1.2规范。

`pyyaml`仍将是默认的解析器,因为它使用得更多它仍然被认为是python世界中默认的"yaml"解析器。这在将来的任何重大更新中都可能发生变化。




\utf-8和数据编码

执行:

```
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>;`python dateutil>;=2.4.2`
2018年)
——

**重要**许可证更新**重要**

-在此版本中,从许可证文件中删除了一行。在以下提交中进行了修改
(cc4e31b39ff4cce2dfbc662baa6469470dd3c033 10月3日星期三16:20:59 2018+0200),这将是
1.7.0版本的主要原因。在此提交之前的所有提交、标记和发布(1.6.1及其之前的所有发布)都将
使用旧许可证,其中包括在上述提交中所做的更改。只有版本1.7.0和提交超过
这一点将使用新的/更新的许可证文件。

一般更改:

-放弃对python 3.3和3.4的支持



1.6.1(2018年3月13日)
---------


新关键字:

-添加了对关键字*可空*的支持。现在,当不使用*必需*关键字时,可以允许关键字不为空。
-添加了对关键字*类*的支持。它不会导致任何验证错误,但是,它可以使使用该密钥的笨拙模式兼容。


错误修复:

-改进与Unicode的兼容性,以验证为字符串。

更改的行为:

-propergate json和yaml从cli向用户使用时的加载错误,以方便用户调试。

一般更改:

-允许ruamel.yaml版本高达0.16
-许可证现在与生成版本捆绑在一起。



1.6.0(2017年1月22日)
----


新关键字:

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

错误修复:

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


新功能:

-现在可以在使用映射时指定默认规则。
如果找不到其他键,则将使用该规则。
这是原始Kwalify实现中缺少的功能的端口。
-添加了新功能helper method*keywords*to*rule*类,可以输出任何*rule*对象的所有活动关键字。
这有助于在调试代码时轻松转储任何*rule*对象的所有活动关键字。
-添加了新的cli标志*--严格的规则验证*它将验证所有使用的所有*rule*对象中的关键字只使用每个定义类型支持的规则。
如果只使用*core*对象,则在创建*core*对象实例时设置*strict_rule_validation=true*。
此功能在此版本中是可选的,但在*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*
-keyword*desc*now*的值必须*是字符串或*ruleerror*wi将被引发。
-关键字的值*示例*现在*必须*是字符串,否则将引发*规则错误*。
-关键字*名称*现在*的值*必须*是字符串,否则将引发*规则错误*。

常规更改:

-直接从*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/是否已放弃此项目
pyyaml仍可以在下一个主要版本(1.6.0)中使用,但在版本(1.7.0)中删除并转发。
-ruamel.yaml现在可以使用以下命令安装以进行本地开发*pip install-e'.[ruamel]'*
,对于生产环境,使用*pip install'pykwalify[ruamel]'*
-ruamel.yaml现在在pyyaml之前使用(如果安装在您的系统上)
-修复了标量类型未正确验证的错误。
-取消固定所有依赖项,但仍保持每个库的最低版本
-在匹配字符串(jmacarthur)时允许混合regex和普通关键字


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字符时引发异常。
-重写了所有Rruleerror exceptions to now有更好的异常消息。
-ruleerror exceptions现在有一个唯一的"error_key",可以更容易地识别它是什么错误。
-ruleerrors的路径已作为变量移动到异常中。
-重写所有schemaconflict exceptions to be更具可读性。



1.3.0(2015年7月14日)
—————————————————————————————————————————————————————————————————————————请参阅"docs/upgrade instructions.md"
了解更多详细信息。
-现在可以使用针对每个验证错误引发的异常。它可以
在变量"c.validation\u errors\u exceptions"中找到。它们包含有关错误的更详细信息




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

-此功能是新的和实验性的。
实现了对序列中多个值的支持。
这将允许对不同类型的一个序列可以包含。您可以要求
序列中的每个值对所有不同的可能性都是有效的。
测试表明它仍然保持与所有旧模式的向后兼容性,但不能保证它是有效的。
如果您在此版本中发现回归,请提交一个错误报告以便尽快修复。
-此功能是新的和实验性的。
添加了定义可用于对所有类型调用自定义python代码/函数的python文件的功能,以便可以对所有数据结构执行自定义/额外验证。
-添加新的关键字"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`-->;`Map`
*`Required`-->;`Req`
*`Regex`-->;`Re`
-重写所有测试文件以减少文件数





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

-要上载到PYPI的第一个版本-关键字"range"现在可以应用于map&;序列类型。
-添加了更多的测试文件。
-删除了关键字"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]标签I找到n输出,文档和代码。
-可通过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 ArrayIndexOutOfBoundsException,但不访问任何索引   用JAVA代码复制的奇怪结果   基于当前用户的Java目标目录   运行时错误java scanner不接受中间有空格的两个单词   java Android从editText获取文本   枚举内的java搜索   java自定义布局高度包装内容,而不是使用定义的布局高度   Java 5中引入的Enum类的用途是什么?   excel如何在java swing中查看xls文档   java如何模拟影响对象的void返回方法   Java线程之间的多线程数据交换   JavaSpring引导:库是否会从父应用程序/服务获取依赖关系   java经过一段时间的循环:为什么刚刚写入的数组是空的?   Regex和java忽略引号内的关键字和字符串   oracle我正在从java读取文本文件(逗号作为分隔符)