有效的字典和嵌套对象验证

valleydeight的Python项目详细描述


PyPI versionBuild Statuscodecov

山谷采光

发音类似:“validate”[val-i-deyt]

python的有效字典和嵌套对象验证

最近,我发现自己写了很多基于yaml的配置文件。 能够快速和容易地为这些文件组合一个模式已经变得有用了,而且现有的选项对我来说是很尴尬的。

这里的方法是直接处理产生的python对象。 这使得这里的代码在许多其他情况下都很有用,并且可以很容易地验证其他类型的标记(例如json、xml(?),腌制原语等)。

安装

pip install --user valleydeight

用法

要验证一个对象,必须建立一个验证器。对大多数类型来说,这样做是直接的。 目前实现了多种类型的验证程序:

  • 原始类型:StrIntFloatBool
  • 项目列表:ListFixedList
  • 项目词典:Dict
  • 混合类型:Choice
  • 自定义对象:Object
  • 接受所有内容的验证器:Pass

要生成验证器,只需实例化上面的一个类,在需要的地方将更复杂的类型组合在一起。 要将验证器与要验证的对象一起使用,请调用它。

例如,假设我们希望检查是否有一个字典列表,其中每个字典都有一个名为“name”的字符串和一个名为“on”的布尔值:

importvalleydeightasvd# Build the validatorvalidator=vd.List(vd.Dict(name=vd.Str(),on=vd.Bool()))# Make a test object that should pass finetest_object=[dict(name="hello",on=True),dict(name="World",on=False)]parsed_object=validator(test_object)# Make a test object that will fail, since one of the elements has the wrong type:test_object=[dict(name="hello",on=True),dict(name="World",on=2018)]parsed_object=validator(test_object)# Raises ValidatorException

Choice类允许我们创建复杂的“自定义”类型:

importvalleydeightasvd# Something like a pythonic Enum with mixed types:enum_t=vd.Choice("one",4,True)# A mixture of validator types:mix_t=vd.Choice(vd.Str(),vd.Dict(name=vd.Str(),value=vd.Pass()).opts(need_all_keys=True))# A mixture of specific values and generic typesmix_t=vd.Choice(10012,False,vd.Str(),vd.List(vd.Float()))

aList和aFixedList之间的区别在于aList允许 任意数量的项,这些项必须都是相同的类型(尽管这可以 是一个Choice类型),而FixedList对于每个元素都有固定的长度和特定的类型。

示例程序

有关示例程序,请参见github上^{}目录中的脚本。 此外,^{}目录中的单元测试可能提供信息。

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

推荐PyPI第三方库


热门话题
java Clojure关键字在内存中的大小是多少?   Java中有固定长度的通用数组对象吗?   PostgreSQL:通过Java更新我的用户表   错误:使用java解析xml   java Json显示列表中对象的名称   java比较JodaTime时区   与JAVA中的API和包的区别?   java的int值在for循环中不改变   谷歌应用引擎中的java RSA   迁移到spring 5后出现java非法字符错误   java Websphere管理控制台不工作   JavaGSON如何始终在json中包含毫秒?   带有空格和双引号的windows Java ProcessBuilder命令参数失败   java错误:重复的zip条目[43.jar:org/apache/http/annotation/NotThreadSafe.class]