Skip to main content

一个小型库,用于验证我们的数据是否符合合同。

项目描述

契约式

contractpy 是一个小型库,用于根据合同验证数据。

基本用法

您可以简单地创建一个合同对象并验证您的数据是否符合合同。

from pycontract import Contract, Types

my_contract = {
    'name': Types.STRING,
    'id': Types.INTEGER
}
contract = Contract(my_contract)

assert contract.verify({'name': 'Captain America': 'id': 12345}) is True

是的,就是这么简单。

此外,它适用于复杂的数据,如嵌套的 dict 对象(dict 对象中的值可以是另一个 dict 对象或 dict 对象列表)。在这种情况下,它将递归迭代内部字典并根据合同验证它们。请查看以下示例,

my_contract = {
    'name': Types.STRING,
    'id': Types.INTEGER,
    'orders': [
        {
            'orderId': Types:INTEGER,
            'price': Types:FLOAT,
        }
    ],
    comments: [Types.String]
}

data = {
    'name': 'Hazel Grace',
    'id: 57331,
    'orders': [
        {
            'orderId': 1,
            'price': 420.45
        },
        {
            'orderId': 2,
            'price': 750.38
        }
    ],
    comments: ["I really liked the product!", "I am completely satisfied."]
}

assert Contract(my_contract).verify(data) is True

如果要为任何字段指定列表,请使用字段中指定的方括号 ( [ ] ) data。在这种情况下,它将根据列表中存在的合同验证所有值。

您还可以使用此库对 REST API 进行合同测试。这种 API 合约测试在微服务架构中会更有用。例如,

def test_users_api_conforms_the_contract():
    user_api_contract = {
        'page': Types.INTEGER,
        'per_page': Types.INTEGER,
        'total': Types.INTEGER,
        'total_pages': Types.INTEGER,
        'data': [
            {
                'id': Types.INTEGER,
                'name': Types.STRING,
                'year': Types.INTEGER,
                'color': Types.STRING,
                'pantone_value': Types.STRING
            }
        ],
        'ad': {
            'company': Types.STRING,
            'url': Types.STRING,
            'text': Types.STRING
        }
    }

    response = requests.get('https://reqres.in/api/user?page=1')

    assert response.status_code == 200
    assert Contract(user_api_contract).verify(response.json()) is True

注意:这里的测试 api 由reqres.in提供支持

项目详情


下载文件

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

源分布

contractpy-0.1.9.tar.gz (5.4 kB 查看哈希

已上传 source