有效的字典和嵌套对象验证
valleydeight的Python项目详细描述
山谷采光
发音类似:“validate”[val-i-deyt]
python的有效字典和嵌套对象验证
最近,我发现自己写了很多基于yaml的配置文件。 能够快速和容易地为这些文件组合一个模式已经变得有用了,而且现有的选项对我来说是很尴尬的。
这里的方法是直接处理产生的python对象。 这使得这里的代码在许多其他情况下都很有用,并且可以很容易地验证其他类型的标记(例如json、xml(?),腌制原语等)。
安装
pip install --user valleydeight
用法
要验证一个对象,必须建立一个验证器。对大多数类型来说,这样做是直接的。 目前实现了多种类型的验证程序:
- 原始类型:
Str
,Int
,Float
,Bool
- 项目列表:
List
,FixedList
- 项目词典:
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上^{