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

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是否可以创建一个正则表达式来查找与模式不匹配的字符串?   使用“debugUnreturnedConnectionStackTraces”进行java调试连接丢失   java如何在openLDAP中禁用/启用用户帐户?   java无法从jsoup api获取某些类   java无法从APK提取XML文件   如何在linux命令行中替换多个文件中的字符串   java学生班。如何根据单位输入打印成绩?   java有没有办法将Struts配置为绑定null而不是空字符串?   python使用OpenCV[Java]检测简单几何形状   java文件。isFile()和文件。isDirectory()返回false   java Fetch有条件地加入hibernate,还是将实体设计更改为子实体上的条件Fetch?   java lombok@Data generated setter是否对成员对象(如映射)执行深度复制?   java如何使JLabel从下一行开始   java Gradle依赖解决了配置文件的问题