验证配置并生成可读的错误消息。

cfgv的Python项目详细描述


BuildStatusazure devops coverage

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)

类似于conditionaloptional

条件递归(键、模式、条件键、条件值,确保不存在=真)

类似于条件模式,但使用模式模式

无附加键(键)

用于映射以确保仅存在指定的键。

相等辅助对象

平等帮助者至少要为他们的行为实施\u eq

它们还可以实现def descripe_opposite(self):以用于 确保不存在=真错误消息(否则,将使用\u repr\uu

非(VAL)

如果值不等于val,则返回true

输入(*值)

如果值包含在值中,则返回

notin(*值)

如果值不包含在值中,则返回

检查功能

提供了许多现成的检查功能。

check函数接受一个参数,即validationerror或不返回任何内容。

检查任何(uu)

Noop检查功能。

检查类型(tp,typename=none)

返回用于检查特定类型的check函数。设置字体名 将替换错误消息中类型的名称。

< E >空:< > >
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))

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

推荐PyPI第三方库


热门话题
在Java中超类的构造函数中获取扩展泛型类的泛型类型?   java如何获取实体A的不同记录,该实体A与另一个实体B有一对多的关联,并按B记录的最新时间戳的最大值排序   JavaJSF导航参数依赖关系   具有短密文的java SecretKey匿名IBE   鼠标事件“找不到符号”错误的java解决方案   调用mediaplayer后使用java。停止我不能再发出声音了。为我解释开发参考?   java如何在序列化Avro消息时传递空值   java Sip Servlet未发送邀请请求   java根据规则访问节点,并删除链表中所有未访问的节点   Java 6上的jmockit测试用例必须使用Java代理吗?   JSF转换器f:convertDateTime是如何工作的?   java如何清除Firebase云数据库中的数组?   基于日期的列表java自定义排序   测量Java对象的内存消耗(完全“在应用程序中”)   故障终止/崩溃时的javafx Java(FX)故障保护警报?   java访问名称编码未知的文件   java如何在BlackBerry中绘制实心正方形?   java从JTextArea中删除边框   java可以使用另一个bean的属性来引用spring容器XML配置   数据透视表中具有相同列索引的java计数列