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

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重写   java有一种制作jre1的方法。8作为jre1运行。7.   java从Android应用程序向AWS S3上传文件   java是一种正确的匿名子类化TimerTask的方法,在run方法中保留对“this”的引用   c#应用程序开发:我应该检查表上的primarykey还是假设它应该在那里?   swing在Java中绘制二叉树如何调用函数   网络编程在Java中通过按钮终止服务器程序   mysql从java创建SQL函数导致异常   java文件系统找不到指定的路径   JavaSpring安全性可用于GET,但不能用于其他方法   带有PDFBox的java标记PDF   Java swing,JButton在第一次按下按钮时不会调整大小,但在第二次按下按钮时会调整大小   java是我的PropertyLoader单例线程安全吗?   java如何在kafka consumer中按内容设置主题?   java优化jtable   从java包创建可执行jar文件   getLastKnownLocation()上的java Android应用程序崩溃   java RestTemplate:如何发送多部分?   JavaDropWizard:从同一个类生成html和json