跳转到主要内容

用于访问启用Swagger-1.1的API的异步库

项目描述

关于

trio_swagger11是swagger.py的trio兼容版本,能够理解Swagger 1.1定义(仅限于此)。

由于swagger已被重命名为OpenAPI,现在已发布3.0版本(并且有一个实际的规范 – 与Swagger 1.1不同),因此此库(主要)只能与Asterisk一起使用,Asterisk仍然使用Swagger 1.1声明。

Trio-swagger11支持WebSocket扩展,允许对WebSocket进行文档记录,并自动生成WebSocket客户端代码。

来自swagger.py

Swagger.py是一个用于使用Swagger定义的API的Python库。

Swagger的最好描述可以在Swagger主页上找到

Swagger是一个用于描述、生成、消费和可视化RESTful Web服务的规范和完整的框架实现。

Swagger规范 定义了如何使用Swagger描述API。

用法

从PyPI安装最新版本。

$ sudo pip install trio_swagger11

或者使用 setup.py 脚本从源安装。

$ sudo ./setup.py install

API

trio_swagger11将动态从启用Swagger的RESTful API构建一个对象模型。

以下是一个使用Asterisk REST接口的简单示例

#!/usr/bin/env python3

import json
import trio

from trio_swagger11.client import SwaggerClient
from trio_swagger11.http_client import AsynchronousHttpClient

http_client = AsynchronousHttpClient()
http_client.set_api_key('localhost', 'hey:peekaboo')

async def run(ari,msg_json):
    channelId = msg_json['channel']['id']
    await ari.channels.answer(channelId=channelId)
    await ari.channels.play(channelId=channelId,
                    media='sound:hello-world')
    # In a real program you should wait for the PlaybackFinished event instead
    await trio.sleep(3)
    await ari.channels.continueInDialplan(channelId=channelId)

async def main():
    ari = SwaggerClient(
        "http://localhost:8088/ari/api-docs/resources.json",
        http_client=http_client)

    ws = ari.events.eventWebsocket(app='hello')

    async for msg in ws:
        if not isinstance(msg, WebsocketDataMessage):
            break
        elif not isinstance(msg, WebsocketTextMessage):
            continue # ignore bytes

        msg_json = json.loads(msg.data)
        if msg_json['type'] == 'StasisStart':
            await nursery.start_soon(run,ari,msg_json)

if __name__ == "__main__":
    trio.run(main)

数据模型

swagger_model 模块提供的数据模型几乎与原始 Swagger API 资源列表和 API 声明相同。这意味着如果您在文档中添加额外的自定义元数据(例如 _author_copyright 字段),它们将传递到对象模型中。我建议在自定义字段前加上下划线,以避免与 Swagger 的未来版本冲突。

有一些有意义的差异。

  • 资源列表

  • 添加了 filebase_dir 字段,引用了原始的 .json 文件。

  • 资源列表的 resource_listing 中的 api 数组对象包含一个 api_declaration 字段,这是从引用的 API 文档中处理后的结果。

  • API 声明

  • 添加了一个 file 字段,引用了原始的 .json 文件。

开发

代码使用 Sphinx 进行了注释,这允许 IntelliJ IDEA 在自动完成时更好地推断类型。

为了保持隔离,我还建议安装(并使用)virtualenv

$ sudo pip install virtualenv
$ mkdir -p ~/virtualenv
$ virtualenv ~/virtualenv/swagger
$ . ~/virtualenv/swagger/bin/activate

Setuptools 用于构建。使用 Pytest 进行单元测试,并安装了 coverage 插件以生成代码覆盖率报告。使用 --with-coverage 生成代码覆盖率报告。报告的 HTML 版本放在 cover/index.html

$ ./setup.py develop   # prep for development (install deps, launchers, etc.)
$ ./setup.py pytest    # run unit tests
$ ./setup.py bdist_egg # build distributable

测试

只需运行 python3 setup.py pytest

注意,目前无法独立测试此模块。以前的版本需要 httpretty 的修改版本。

TODO:使用本地服务器代替。

许可协议

版权(c)2013,Digium,Inc. 版权(c)2018,Matthias Urlichs

trio_swagger11 使用 BSD 3-Clause License 许可。

当前作者谦逊地请求您分享任何进一步的错误修复或对此代码的改进。

项目详情


下载文件

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

源分布

trio_swagger11-0.11.1.tar.gz (26.9 kB 查看哈希)

上传时间

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面