跳转到主要内容

Frappuccino

项目描述

Frappucino

冻结您的API。

Frappucino允许您在开发过程中确保您没有破坏API。通过首先在某个时间点对API进行印痕,然后将其与当前项目状态进行比较。目标是当引入不兼容的更改时警告您,并列出这些更改。

您可以将它集成到您的CI中,以确保您无意中破坏了东西。

示例

# old function
def read(name, *, options=None):
    with open(name, 'rb') as f:
        return process(data)

# new function
def read(name_or_buffer, *, options=None):
    if isinstance(name, str):
        with open(name, 'rb') as f:
            data = f.read()
    else:
        data = name_or_buffer.read()
    return process(data)

在上面的例子中,API有一个微妙的破坏,因为您可能不记得位置参数可以用关键字参数使用。也就是说,您的客户可能会使用

read(name='dump.csv')

因此,将位置参数的namename改为name_or_buffer是API的更改。有大量类似的细节,您可能会在不经意间破坏API。当在开发分支上工作时,单元测试可能无法捕获所有这些。Frappuccino就在这里帮助。

示例

$ source activate astropy==3.2
$ frappuccino astropy astropy.timeseries --save    astropy.json

$ source activate astropy=master
$ frappuccino astropy astropy.timeseries --compare astropy.json

The following signatures differ between versions:

      - astropy.time.core.TimeDelta.to(self, *args, **kwargs)
      + astropy.time.core.TimeDelta.to(self, unit, equivalencies='[]')

      - astropy.table.table.Table.add_column(self, col, index='None', name='None', rename_duplicate='False', copy='True')
      + astropy.table.table.Table.add_column(self, col, index='None', name='None', rename_duplicate='False', copy='True', default_name='None')

      - astropy.table.table.Table.replace_column(self, name, col)
      + astropy.table.table.Table.replace_column(self, name, col, copy='True')

其他示例

cp frappuccino/tests/old.py frappuccino/t.py ; frappuccino frappuccino.t --save t.json; sleep 2;  cp frappuccino/tests/new.py frappuccino/t.py; frappuccino frappuccino.t --compare t.json

项目详情


下载文件

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

源分布

frappuccino-0.0.8.tar.gz (98.5 kB 查看哈希值)

上传时间 源代码

构建分发版

frappuccino-0.0.8-py3-none-any.whl (75.3 kB 查看哈希值)

上传时间 Python 3

支持者