使用IContract库定义的lint协定。

pyicontract-lint的Python项目详细描述


皮棉

Build statusTest coverageDocumentation statusPyPI - versionPyPI - Python Version

pyicontract lint lints在python代码中使用 icontract library

执行以下检查:

DescriptionIdentifier
A preconditions expects a subset of function’s arguments.pre-invalid-arg
A snapshot expects at most an argument element of the function’s arguments.snapshot-invalid-arg
If a snapshot is defined on a function, a postcondition must be defined as well.snapshot-wo-post
A ^{tt1}$ function must be defined in the contract.snapshot-wo-capture
A postcondition expects a subset of function’s arguments.post-invalid-arg
If a function returns None, a postcondition should not expect ^{tt2}$ as argument.post-result-none
If a postcondition expects ^{tt2}$ argument, the function should not expect it.post-result-conflict
If a postcondition expects ^{tt4}$ argument, the function should not expect it.post-old-conflict
An invariant should only expect ^{tt5}$ argument.inv-invalid-arg
A ^{tt6}$ must be defined in the contract.no-condition
File must be valid Python code.invalid-syntax

用法

pyicontract lint分析代码并尝试使用 astroid library。因此,您需要确保导入的模块位于 PYTHONPATH在调用pyicontract lint之前。

设置环境后,使用位置参数列表作为路径调用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。 当您递归地对目录中的文件进行lint操作并希望排除某些文件时,这非常有用。

模块icontract_lint

如果要以编程方式使用pycontract lint,则在icontract_lint模块中提供该api。

icontract_line模块的主要入口点是:

  • check_file(...):lint单个文件,
  • check_recursively(...):lint一个目录和
  • check_paths(...):lint文件和目录。

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

下面是一个示例代码,它对给定路径的列表进行lint操作并生成详细的输出:

importpathlibimportsysimporticontract_linterrors=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
  • 我们还提供了一组预提交检查,lint和检查代码的格式。从激活的 具有开发依赖关系的虚拟环境:
./precommit.py
  • 预提交脚本还可以自动格式化代码:
./precommit.py  --overwrite

版本控制

我们跟着Semantic Versioning。版本x.y.z表示:

  • X是主要版本(向后不兼容),
  • y是次要版本(向后兼容),并且
  • z是修补程序版本(向后兼容的错误修复)。

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

推荐PyPI第三方库


热门话题
java根据两个数组的值对数组进行排序   具有自签名证书和NTLM代理的java Maven SSL repo错误   java自定义字体按钮不工作AndroidStudio   java通过Spring MVC web应用程序向客户端发送文本文件   Java Spring Web服务SOAP身份验证   ANT property environment=“env”无法在JAVA中检索它,但如果作为ANT命令运行,则可以正常工作   java是为spring mvc rest api或spring boot api对应用服务器的每个新请求创建的服务、存储库和组件的新实例吗?   java私有静态最终字符串未完成其工作   PKCS12的安全Java密钥重新处理   java JPA继承表每类SQLSyntaxErrorException