检查使用icontract库定义的合约。
项目描述
pyicontract-lint
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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7e73fded40b7a5ddc1cd2b03a826512bf9f490ffacf8e020636f25d26d1ed806 |
|
MD5 | 30e9494a5cc2f3be30218b7762e581a2 |
|
BLAKE2b-256 | 7861b0c3522132d36f9564f804aa73e4217e930f4b4dd06df5de52b02f5b316d |