跳转到主要内容

扩展Sphinx以包含icontracts。

项目描述

sphinx-icontract

Continuous integration Coverage PyPi PyPI - Python Version

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() 或 Bnot x.y() ⇒ B

  • 条件表达式被翻译为 B if A else TrueA ⇒ 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

预提交检查

我们提供了一套预提交检查,用于检查代码格式并执行代码格式化。

具体来说,我们使用

从已激活的开发依赖项的虚拟环境中本地运行预提交检查

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

./precommit.py  --overwrite

版本控制

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

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

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

  • Z 是修补版本(兼容的 bug 修复)。

项目详情


下载文件

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

源分布

sphinx-icontract-2.0.3.tar.gz (12.5 kB 查看哈希值)

上传时间

由以下支持