访问星号rest接口的库
ari的Python项目详细描述
关于
此包包含用于星号rest的python客户端库 接口。它建立在 Swagger.py库,提供 与swagger.py生成的api相比,改进了特定于星号的api
用法
使用setup.py脚本从源代码安装。
$ sudo ./setup.py install
api
ari客户机可以简单地通过ari.connect方法创建。这个遗嘱 基于从asterisk下载的swagger api创建客户机。
api被建模为存储库模式,如您在域中所见 驱动设计。每个swagger资源(也称为api声明)都映射到 repository对象,作为客户机上的字段提供 (client.channels,client.bridges)。
来自星号的响应映射到一级对象,类似于域 存储库模式中的对象。这些都在回复中提供 restful api调用,以及通过websocket接收的事件中的字段。
拨打rest电话
每个repository对象提供调用非实例特定的 关联的swagger资源(bridges.list()的操作, channels.get())。还提供了特定于实例的方法,这些方法要求 要传递的标识参数(channels.get(channelId=id))。
在域对象上还提供了特定于实例的方法 (some_channel.hangup())。
注册事件回调
星号可以通过WebSocket发送异步消息来指示 对申请感兴趣。
Client对象有一个on_event方法,可以用来 从星号订阅特定事件。
一类对象还具有“on-event”方法,可以订阅 与那个物体有关的停滞事件。
对象生存期
存储库对象存在于拥有它们的客户端的生存期中。
域对象是短暂的,与底层的生存期无关。 星号中的对象。实际上,这意味着如果你打电话 channels.get('1234')多次,您可能会得到一个不同的对象 每一次。
您可以保留域对象的实例,但应该考虑 陈腐。对象中包含的数据可能已过期,但 对象上的方法仍应正常工作。
如果在过时的域对象上调用方法,该对象不再存在 星号,您将得到一个httperror异常(404未找到)。
注意事项
存储库和域对象公开的动态方法实际上是, 远程过程调用。当前的实现是同步的,这意味着 如果响应速度慢(网络速度慢,数据包丢失, 系统负载等),则整个应用程序可能会受到影响。
示例
importariclient=ari.connect('http://localhost:8088/','hey','peekaboo')defon_dtmf(channel,event):digit=event['digit']ifdigit=='#':channel.play(media='sound:goodbye')channel.continueInDialplan()elifdigit=='*':channel.play(media='sound:asterisk-friend')else:channel.play(media='sound:digits/%s'%digit)defon_start(channel,event):channel.on_event('ChannelDtmfReceived',on_dtmf)channel.answer()channel.play(media='sound:hello-world')client.on_channel_event('StasisStart',on_start)client.run(apps="hello")
开发
代码使用Sphinx进行记录,其中 允许IntelliJ IDEA 以便更好地推断自动完成的类型。
为了保持隔离,我还建议安装(和使用) virtualenv。
$ sudo pip install virtualenv $ mkdir -p ~/virtualenv $ virtualenv ~/virtualenv/ari $ . ~/virtualenv/ari/bin/activate
Setuptools用于 建筑。^使用{a6} 对于单元测试,将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
待办事项
- Create asynchronous bindings that can be used with Twisted, Tornado, etc.