跳转到主要内容

异步访问Asterisk REST接口的库

项目描述

异步克隆自 https://github.com/asterisk/ari-py

使用swagger-py的异步版本

关于

此软件包包含Asterisk REST接口的Python客户端库。它基于Swagger.py库,提供改进的、针对Asterisk的特定API,该API由Swagger.py生成

使用

使用setup.py脚本来从源代码安装。

$ sudo ./setup.py install

API

可以简单地通过 aioari.connect方法创建一个异步ARI客户端。这将根据从Asterisk下载的Swagger API创建一个客户端。

API被建模成仓储模式,就像你在领域驱动设计中找到的那样。每个Swagger资源(即API声明)都被映射到一个仓储对象,该对象作为客户端的一个字段提供(client.channelsclient.bridges)。

来自Asterisk的响应被映射到一等对象,类似于仓储模式中的领域对象。这些对象既在RESTful API调用的响应中提供,也在通过WebSocket接收的事件的字段中提供。

制作REST调用

每个仓库对象都提供了调用相关Swagger资源(bridges.list()channels.get())的非实例特定操作的方法。还提供了实例特定方法,这些方法需要传递身份参数(channels.get(channelId=id))。

在域对象上也提供了实例特定方法(some_channel.hangup())。

注册事件回调

Asterisk可能会通过WebSocket发送异步消息,以指示应用程序感兴趣的事件。

客户端对象有一个on_event方法,可以用来订阅来自Asterisk的特定事件。

一等对象也有“on_event”方法,可以订阅与该对象相关的Stasis事件。

对象生命周期

仓库对象存在的时间等于拥有它们的客户端的生命周期。

域对象是短暂的,不与Asterisk中底层对象的生命周期相关联。实际上,这意味着如果您多次调用channels.get('1234'),您可能会每次都得到不同的对象。

您可以保留一个域对象实例,但应将其视为过时的。对象中包含的数据可能已过时,但对象上的方法仍应正常工作。

如果您在不再存在于Asterisk中的过时域对象上调用方法,您将得到一个HTTPError异常(404未找到)。

注意事项

仓库和域对象暴露的动态方法实际上是远程过程调用。当前实现是同步的,这意味着如果响应变慢(网络慢、数据包丢失、系统负载等),则整个应用程序都可能受到影响。

示例

import asyncio
import aioari

client = await aioari.connect('http://localhost:8088/', 'hey', 'peekaboo')

def on_dtmf(channel, event):
    digit = event['digit']
    if digit == '#':
        channel.play(media='sound:goodbye')
        channel.continueInDialplan()
    elif digit == '*':
        channel.play(media='sound:asterisk-friend')
    else:
        channel.play(media='sound:digits/%s' % digit)


def on_start(channel, event):
    channel.on_event('ChannelDtmfReceived', on_dtmf)
    channel.answer()
    channel.play(media='sound:hello-world')


client.on_channel_event('StasisStart', on_start)

loop = asyncio.get_event_loop()
loop.run_until_complete(client.run(apps="hello"))

开发

代码使用Sphinx进行文档编写,这允许IntelliJ IDEA更好地推断自动完成的类型。

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

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

Setuptools用于构建。Nose用于单元测试,已安装coverage插件以生成代码覆盖率报告。通过传递--with-coverage生成代码覆盖率报告。报告的HTML版本位于cover/index.html

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

待办事项

  • 创建可以与Twisted、Tornado等一起使用的异步绑定。

  • 添加对Python 3的支持

许可证

版权(c)2013-2014,Digium,Inc。版权(c)2016,Denis Fokin。版权(c)2018,Matthias Urlichs。

aioari使用BSD 3-Clause License授权。

项目详情


下载文件

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

源分布

aioari-0.10.2.tar.gz (31.3 kB 查看哈希值

上传时间

由以下支持

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