扩展Sphinx以包含icontracts。
项目描述
sphinx-icontract
Sphinx-icontract扩展Sphinx以将类和函数的icontracts包含在文档中。
用法
Sphinx-icontract基于sphinx.ext.autodoc模块。您需要在Sphinx配置文件(conf.py)中的
这里是一个示例摘录
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
'sphinx.ext.autodoc',
'sphinx_icontract'
]
影响
Sphinx-icontract试图从条件中推断出影响,并将它们渲染为影响(... ⇒ ...)。我们实现了一个基于规则的匹配,涵盖了大多数实际用例。
not A or B 转换为 A ⇒ B。
表达式被否定,因此 x < y 或 B 被翻译为 x >= y ⇒ B。更通用的表达式使用 not 进行否定:从 x.y() 或 B 到 not x.y() ⇒ B。
条件表达式被翻译为 B if A else True 为 A ⇒ B。
我们发现当在源代码中阅读时,将条件表达式形式视为蕴涵会令人困惑,并鼓励程序员使用析取形式。
自定义错误
如果您在合约中指定自定义错误,sphinx-icontract 将尝试将错误包含在文档中。
错误类型将根据合约的 error 参数推断。如果错误消息以字符串字面量给出且没有合约描述,则错误消息将用于描述合约,这样您就不必两次指定描述(一次在合约描述中,一次在错误消息中)。
例如
@icontract.require(
lambda x: x > 0,
error=lambda: ValueError("x positive"))
def some_func(x: int) -> None:
pass
将被记录为
:requires:
* :code:`x > 0` (x positive; raise :py:class:`ValueError`)
如果同时提供描述和错误消息,则只包括描述
@icontract.require(
lambda x: x > 0,
description="x must be positive",
error=lambda: ValueError("x positive"))
def some_func(x: int) -> None:
pass
将被渲染为
:requires:
* :code:`x > 0` (x must be positive; raise :py:class:`ValueError`)
安装
使用 pip 安装 sphinx-icontract
pip3 install sphinx-icontract
开发
查看存储库。
在存储库根目录下,创建虚拟环境
python3 -m venv venv3
激活虚拟环境
source venv3/bin/activate
安装开发依赖项
pip3 install -e .[dev]
我们使用 tox 进行测试和打包发行版
tox
预提交检查
我们提供了一套预提交检查,用于检查代码格式并执行代码格式化。
具体来说,我们使用
yapf 检查格式。
使用 pydocstyle 检查文档字符串的样式。
使用 mypy 执行静态类型分析。
使用 pylint 进行各种检查。
使用 pyicontract-lint 检查合约。
使用 Python 的 doctest 模块 执行 doctests。
从已激活的开发依赖项的虚拟环境中本地运行预提交检查
./precommit.py
预提交脚本还可以自动格式化代码
./precommit.py --overwrite
版本控制
我们遵循 语义版本控制。版本 X.Y.Z 表示
X 是主版本(不兼容),
Y 是次要版本(兼容),
Z 是修补版本(兼容的 bug 修复)。
项目详情
sphinx-icontract-2.0.3.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5b367c92e05934a75a40cd2e9a08e34ecaab9b9b2b8c0c28bff5913c1337df78 |
|
MD5 | b220a8574983d42b5fec46e629b3f7e4 |
|
BLAKE2b-256 | 1d2f909e39b10c4d27a08085801c7f0a70e1b4bc51262ca348942f7bdce2d885 |