基于类型提示自动检查semver符合性
typejudge的Python项目详细描述
作为一种服务的判断。
Typejudge将自动检查semver 基于类型提示的符合性。如果函数的类型签名更改, 它将判断这是一个api更改,并推荐一个主要版本bump。
这在很大程度上是受elm的包管理器的启发,它还强制执行semver。
安装
注意:typejudge只适用于python 3.5及更高版本。
使用pip安装:
$ pip install typejudge
用法
$ typejudge --help usage: typejudge [-h] [-o OUT] [-f FILE] MODULE [VERSION] judge your types positional arguments: MODULE module to import and check VERSION current version of the package optional arguments: -h, --help show this help message and exit -o OUT, --out OUT save current type definitions to this file -f FILE, --file FILE load type definitions from this file
示例用法
假设我们有一个模块,它包含了 导出的API,testmodule.py:
defgreeting(name:str)->str:return'Hello '+name
将类型保存到以下位置:
$ typejudge -o testmodule.json testmodule
对testmodule.py进行一些小更改,添加一个新函数:
defgreeting2(name:str,name2:str)->str:return'Hello '+name+' and 'name2
typejudge将推荐这是一个小版本:
$ typejudge -f testmodule.json testmodule minor
相同,但具有已知的当前版本号:
$ typejudge -f testmodule.json testmodule 0.3.2 0.4.0
对现有类型签名进行更改:
fromtypingimportListdefgreeting(names:List[str])->str:return'Hello '+' '.join(names)
typejudge现在将推荐这是一个主要版本:
$ typejudge -f testmodule.json testmodule major
在不改变api类型的情况下,typejudge将推荐一个补丁版本。
bumpversion
的示例用法Typejudge在bumpversion中工作得很好这么做可能是 不可取,但您可以完全自动化发布。
假设与上一节中的文件相似,则为 bumpversion,类似于:
$ cat .bumpversion.cfg[bumpversion]current_version=2.0.3commit=Truetag=True[bumpversion:file:setup.py]
以及setup.py:
$catsetup.pyimportsetuptoolssetuptools.setup(name="testpackage",version="2.0.3",description="Test stuff",)
然后沿着这些线运行一些内容以剪切新版本:
$ bumpversion $(typejudge -f testmodule.json testmodule)
此时还需要保存api的状态,以便可以比较 在下一个版本中:
$ typejudge -o testmodule.json testmodule
显然,用这种方式释放时要谨慎只是因为 你的API类型保持不变,并不一定意味着你的代码 是向后兼容的。typejudge建议最小的版本增量 应该可以。