揭示您的mypy-typed库的真实公共API
项目描述
doxxie
doxxie
是一个 mypy 插件,它输出mypy-typed Python库的真实公共API。 doxxie
的输出可以提交到源控制,并通过 CI作业 进行验证,以确保对公共API的更改是有意为之并已记录。
doxxie
挖掘库的公共API,并递归地挖掘出由公共属性和函数暴露的所有类型,直到达到真实的公共API。
安装
从PyPI安装
$ pip install doxxie
使用方法
将 doxxie
添加到 mypy 配置文件 的插件部分
[mypy]
files = mylib/
plugins = doxxie
然后使用指定包含哪些模块的环境变量运行mypy
$ DOXXIE_INCLUDES=mylib mypy --no-incremental
将输出一个包含 mylib
公共API的 .public_api
文件。
注意: 由于 doxxie
无法访问mypy的缓存类型信息,因此需要使用 --no-incremental
标志。
输出
doxxie
输出一个包含指定模块所有公共变量的 .public_api
文件。
示例
有关以下代码的示例,请参阅 docs/example
考虑以下Python库 lib
lib/
├── __init__.py
├── api/
│ └── __init__.py
└── _internal/
└── __init__.py
# api/__init__.py
from lib._internal import LeakedPrivate, Private
class Public:
def __init__(self):
self.public_attr: int = 5
self.public_leak: LeakedPrivate = LeakedPrivate()
self._private: Private = Private()
def public_method(self) -> None:
pass
def _private_method(self) -> str:
return "hi"
# _internal/__init__.py
class LeakedPrivate:
def public_method(self) -> None:
pass
class Private:
pass
运行 DOXXIE_INCLUDES=pkg.api DOXXIE_EXCLUDES=pkg._internal mypy
将输出以下内容到 .public_api
{'lib.Private': {'bases': ['builtins.object'],
'mro': ['lib.Private', 'builtins.object']},
'lib.Private.public_method': {'arg_kinds': [0],
'arg_names': ['self'],
'type': {'arg_types': ['lib.Private'],
'ret_type': {'.class': 'NoneType'}}},
'lib._internal.LeakedPrivate': {'bases': ['builtins.object'],
'mro': ['lib._internal.LeakedPrivate',
'builtins.object']},
'lib._internal.LeakedPrivate.public_method': {'arg_kinds': [0],
'arg_names': ['self'],
'type': {'arg_types': ['lib._internal.LeakedPrivate'],
'ret_type': {'.class': 'NoneType'}}},
'lib.api.Public': {'bases': ['builtins.object'],
'mro': ['lib.api.Public', 'builtins.object']},
'lib.api.Public.__init__': {'arg_kinds': [0],
'arg_names': ['self'],
'type': {}},
'lib.api.Public.public_attr': {'type': 'builtins.int'},
'lib.api.Public.public_leak': {'type': 'lib._internal.LeakedPrivate'},
'lib.api.Public.public_method': {'arg_kinds': [0],
'arg_names': ['self'],
'type': {'arg_types': ['lib.api.Public'],
'ret_type': {'.class': 'NoneType'}}}}
配置
所有配置都通过环境变量完成。
DOXXIE_INCLUDES
:要包含在公共API中的模块的逗号分隔列表。只有提供模块下的项目才会包含在公共API输出中。- 示例:
"mod1,mod2"
- 默认值:
""
(默认情况下不包含任何内容)
- 示例:
DOXXIE_EXCLUDES
:从公共API中排除的模块的逗号分隔列表。这些模块最初将被忽略,但来自这些模块的项目可能会通过公共API公开并包含在输出中。- 示例:
"mod1.internal,mod1.vendor"
- 默认:
""
- 示例:
DOXXIE_OUTFILE
:输出结果的文件- 示例:
"my_public_api"
- 默认:
".public_api"
- 示例:
DOXXIE_DERIVE_OUTFILE
:输出包含在公共API中的每个项目的推导结果。此输出可以用来显示导致项目公开的属性链。- 示例:
"public_api_derivation"
- 默认:禁用
- 示例:
DOXXIE_DEBUG
:启用调试日志- 示例:
"1"
- 默认:禁用
- 示例:
CI作业
doxxie
可用于帮助避免对库的公共API进行意外的更改。为此,将.public_api
文件(由doxxie
生成)检入源代码控制,并强制使用CI作业始终提交对它的更改。
GitHub工作流程
name: CI
on:
pull_request:
push:
branches:
- main
jobs:
check_api:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
python-version: '3.9'
- name: install dependencies
run: pip install mypy doxxie
- run: DOXXIE_INCLUDES=doxxie DOXXIE_OUTFILE=.public_api_delta mypy --no-incremental
- run: diff .public_api .public_api_delta
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分发
doxxie-0.2.tar.gz (16.9 kB 查看哈希)
构建分发
doxxie-0.2-py3-none-any.whl (8.6 kB 查看哈希)
关闭
doxxie-0.2.tar.gz的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 85a1bba45550ebf8cae25056d34380f164339229a738c42a81421f1a63c47f65 |
|
MD5 | c1741be7962b85dca29fa926067f6eb3 |
|
BLAKE2b-256 | 5501d716e2a3bb8a5ecb8349f1c70a0f71ef2a752bd9f647b0116c00da43af38 |
关闭
doxxie-0.2-py3-none-any.whl的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6e40145cfdb65a49ea34ad09c58c5eed54a524e801a4fd04a888230dbe224402 |
|
MD5 | 19f8596f91ab6d5a0c0c9c013b6217ec |
|
BLAKE2b-256 | 3f9ccbb7ba4696fdcbeb4440387e963b621d53aa7ad11df83b86635e60049a77 |