跳转到主要内容

检查使用icontract库定义的合约。

项目描述

pyicontract-lint

Continuous integration Test coverage Documentation status PyPI - version PyPI - Python Version

pyicontract-lint 检查Python代码中用icontract库定义的合约。

执行以下检查

描述

标识符

文件应正确读取和解码。

unreadable

预条件期望函数参数的子集。

pre-invalid-arg

快照期望函数参数的最大一个元素。

snapshot-invalid-arg

如果在函数上定义了快照,则必须同时定义后条件。

snapshot-wo-post

合约中必须定义一个捕获函数。

snapshot-wo-capture

后条件期望函数参数的子集。

post-invalid-arg

如果一个函数返回 None,后置条件不应该期望将 result 作为参数。

post-result-none

如果后置条件期望 result 参数,则函数不应该期望它。

post-result-conflict

如果后置条件期望 OLD 参数,则函数不应该期望它。

post-old-conflict

不变量应该只期望 self 参数。

inv-invalid-arg

必须在契约中定义 condition

no-condition

文件必须是有效的 Python 代码。

invalid-syntax

用法

Pyicontract-lint 解析代码并尝试使用 astroid 库 推断导入的模块和函数。因此,在调用 pyicontract-lint 之前,您需要确保导入的模块在您的 PYTHONPATH 中。

设置环境后,使用路径列表作为位置参数调用 pyicontract-lint。

pyicontract-lint \
    /path/to/some/directory/some-file.py \
    /path/to/some/directory/another-file.py

您还可以对目录进行操作。Pyicontract-lint 将递归搜索 *.py 文件(包括子目录)并验证文件。

pyicontract-lint \
    /path/to/some/directory

默认情况下,pyicontract-lint 以详尽且易于阅读的格式输出错误。如果您更喜欢 JSON,请提供 --format 参数。

pyicontract-lint \
    --format json \
    /path/to/some/directory

如果有一个或多个检查失败,则返回码将非零。如果您希望即使有一个或多个检查失败也返回零,则可以指定 --dont_panic 参数。

pyicontract-lint \
    --dont_panic \
    /path/to/some/directory

要禁用文件上的任何 pyicontract-lint 检查,请将单独一行 # pyicontract-lint: disabled 添加到文件中。这在递归检查目录中的文件时很有用,并且希望排除某些文件。

模块 icontract_lint

如果您想以编程方式使用 pycontract-lint,API 在 icontract_lint 模块中提供。

icontract_line 模块中的主要入口点包括

  • check_file(...):检查单个文件,

  • check_recursively(...):检查目录,

  • check_paths(...):检查文件和目录。

输出由函数 output_verbose(...)output_json(...) 生成。

以下是一个示例代码,它检查给定路径列表并生成详尽的输出

import pathlib
import sys

import icontract_lint

errors = icontract_lint.check_paths(paths=[
    pathlib.Path('/some/directory/file.py'),
    pathlib.Path('/yet/yet/another/directory'),
    pathlib.Path('/another/directory/another_file.py'),
    pathlib.Path('/yet/another/directory'),
])

output_verbose(errors=errors, stream=sys.stdout)

模块的完整文档可在 readthedocs 上找到。

安装

  • 使用 pip 安装 pyicontract-lint。

pip3 install pyicontract-lint

开发

  • 查看存储库。

  • 在存储库根目录中创建虚拟环境

python3 -m venv venv3
  • 激活虚拟环境

source venv3/bin/activate
  • 安装开发依赖项

pip3 install -e .[dev]
  • 我们使用 tox 进行测试和打包发行版。运行

tox
  • 我们还提供了一套预提交检查,用于检查和格式化代码。从激活的虚拟环境中带有开发依赖项的本地运行它们。

./precommit.py
  • 预提交脚本还可以自动格式化代码

./precommit.py  --overwrite

版本控制

我们遵循 语义版本控制。版本 X.Y.Z 表示

  • X 是主要版本(不兼容向后),

  • Y 是次要版本(兼容向后),

  • Z 是补丁版本(兼容向后错误修复)。

项目详细信息


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

pyicontract-lint-2.1.4.tar.gz (13.4 kB 查看哈希值)

上传时间

支持者