基于类型提示自动检查semver符合性

typejudge的Python项目详细描述


作为一种服务的判断。

Typejudge将自动检查semver 基于类型提示的符合性。如果函数的类型签名更改, 它将判断这是一个api更改,并推荐一个主要版本bump。

这在很大程度上是受elm的包管理器的启发,它还强制执行semver。

https://asciinema.org/a/81244.png

安装

注意: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建议最小的版本增量 应该可以。

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

推荐PyPI第三方库


热门话题
java Spring MVC 4.0 RequestMapping无值,基于methodname   java Samsung 10 plus不允许wifi p2p发现   春爪哇。伊奥。IOException:找不到文件   java JasperReport饼图示例   java我试图使用mockito注释来测试我的代码,但无法解决mockito异常   命令行界面Java:制作简单的交互式cli应用程序   java jdk1之间的区别是什么。7_9 9和jdk1。7_271   java重载一个被重写的、继承的方法   java LazyInitializationException春季启动   java Play Framework 2.2.1 3个表之间存在大量关系