验证配置并生成可读的错误消息。
cfgv的Python项目详细描述
cfgv
验证配置并生成可读的错误消息。
安装
pip安装cfgv
错误消息示例
通过例子更容易看到这些。下面是一个我键入true的示例
在a预提交配置中。
pre_commit.clientlib.InvalidConfigError:
==> File /home/asottile/workspace/pre-commit/.pre-commit-config.yaml
==> At Config()
==> At key: repos
==> At Repository(repo='https://github.com/pre-commit/pre-commit-hooks')
==> At key: hooks
==> At Hook(id='flake8')
==> At key: always_run
=====> Expected bool got str
API
cfgv.validate(值,模式)
对架构执行验证:
- 失败时引发
validationerror
- 返回成功时的值(为方便起见)
cfgv.apply默认值(值,模式)
返回一个新值,该值将所有缺少的可选值设置为默认值。
cfgv.删除默认值(值,模式)
返回一个新值,该值删除设置为 默认设置。
cfgv.load_from_filename(文件名、架构、加载策略,exc_tp=validationerror)
根据加载策略加载文件。将所有错误重新设置为
exc\u tp
。所有
默认值将填充到结果值中。
与functools.partial一起使用时最有用,如下所示:
load_my_cfg=functools.partial(cfgv.load_from_filename,schema=MY_SCHEMA,load_strategy=json.loads,exc_tp=MyError,)
创建模式
模式验证容器--cfgv
为
大多数正常情况。
编写自己的模式容器
如果下面的内置容器不能完全满足您的用例,您可以 总是自己写。容器使用以下界面:
classContainer(object):defcheck(self,v):"""check the passed in value (do not modify `v`)"""defapply_defaults(self,v):"""return a new value with defaults applied (do not modify `v`)"""defremove_defaults(self,v):"""return a new value with defaults removed (do not modify `v`)"""
映射(对象名、ID键、*项)
创建模式最基本的构造块是一个map
对象名
:将在错误消息中显示id_key
:将用于识别错误消息中的对象。设置为无
如果没有对象的标识键。项
:验证器对象,例如必需的
或可选的
考虑以下模式:
Map('Repo','url',Required('url',check_any),)
在错误消息中,地图可能显示为:
回购(url='https://github.com/pre-commit/pre-commit')
repo(url=丢失)
(如果密钥不存在)
数组(of,allow_empty=true)
用于在数组中嵌套映射。有关标量数组,请参见check_array
的:a
映射
/数组
或其他子架构。允许为空
:当false
时,数组
将确保至少有一个元素。
验证后,这将检查每个元素是否与子架构相关联。
验证程序对象
验证器对象用于验证映射的键值对。
编写自己的验证程序
如果下面的内置验证器不能完全满足您的用例,您可以 总是自己写。验证器使用以下接口:
classValidator(object):defcheck(self,dct):"""check that your specific key has the appropriate value in `dct`"""defapply_default(self,dct):"""modify `dct` and set the default value if it is missing"""defremove_default(self,dct):"""modify `dct` and remove the default value if it is present"""
从内置验证器中借用函数可能是有意义的。他们 另外使用t以下接口:
self.键
:要检查的键self.check fn
:检查功能self.default
:要设置的默认值。
必需(键,检查fn)
确保在map
中存在一个密钥,并且该密钥遵循
检查功能
需要递归(键,模式)
类似于必需的
,但使用a模式
可选(键,复选框,默认值)
如果存在密钥,请检查它是否与 检查功能
应用默认值
将设置默认值
如果它不存在。删除默认值
将删除等于默认值的值
选项递归(键、模式、默认值)
类似于可选的
,但使用a模式
应用默认值
将设置默认值
如果它不存在,然后 用模式验证它。删除默认值
将使用架构删除默认值,然后删除 如果它等于默认值
选项节点默认(键,检查fn)
类似于可选的
,但不应用默认值
或删除默认值
条件(键,check fn,条件键,条件值,确保不存在=false)
- 如果
条件键
等于条件值
,则指定的键
将使用检查功能进行检查。 - 如果
确保不存在
为真
并且条件检查失败,则键将 检查是否有缺席。
注意,条件值
被检查为相等,因此任何对象
可以使用实现。一些是现成的
为此,请参见平等帮助程序。
条件选项(键,check fn,default,条件键,条件值,确保不存在=false)
类似于conditional
和optional
条件递归(键、模式、条件键、条件值,确保不存在=真)
类似于条件模式,但使用模式模式
无附加键(键)
用于映射以确保仅存在指定的键。
相等辅助对象
平等帮助者至少要为他们的行为实施\u eq
。
它们还可以实现def descripe_opposite(self):
以用于
确保不存在=真
错误消息(否则,将使用\u repr\uu
。
非(VAL)
如果值不等于val
,则返回true
输入(*值)
如果值包含在值中,则返回
真
notin(*值)
如果值不包含在值中,则返回
真
检查功能
提供了许多现成的检查功能。
check函数接受一个参数,即值
validationerror
或不返回任何内容。
检查任何(uu)
Noop检查功能。
检查类型(tp,typename=none)
返回用于检查特定类型的check函数。设置字体名
将替换错误消息中类型的名称。
Required('key',check_type(int))# 'Expected bytes' in both python2 and python3.Required('key',check_type(bytes,typename='bytes'))
提供了几种现成的类型检查功能:
检查布尔
检查字节
检查int
检查字符串
检查文本
检查一个(可能的)
返回一个函数,该函数检查值是否包含在possible
例如:
Required('language',check_one_of(('javascript','python','ruby')))
检查regex(v)
确保v
是有效的python正则表达式。
检查阵列(内部检查)
返回一个函数,该函数检查值是否为序列,以及
该序列中的值遵循内部检查
例如:
Required('args',check_array(check_string))
检查并(*fns)
返回对一个值执行多个检查的函数。
例如:
Required('language',check_and(check_string,my_check_language))