matterhorn restful api的python包装器
pyhorn的Python项目详细描述
皮霍恩
pyhorn是一个python客户端,用于访问 露天矿matterhorn 视频采集系统。它提供了一个客户端接口,即mhclient,它公开了方法 用于访问来自不同matterhorn的原始和"对象化"响应数据 rest api端点。
此软件应被视为alpha,因此可能在 不久的将来。
安装
pip install pyhorn
概述
可以通过mhclient的方法访问来自rest端点的数据 对象。在许多情况下,响应数据被封装在其他类中,以便 可以使用对象表示法访问数据的各种属性。例如, 有关matterhorn工作流的数据可以使用 client.workflows()访问 方法。返回值将是endpoints.workflow.workflow 对象的列表。 这些对象的 操作属性将为您提供 端点.工作流.工作流操作 对象。等等。
目前只有一把端点用这种方式包装,而且只有一个 为每个类定义的便利类和方法很少。我们的想法是继续 根据我(或你)的需要添加更多。拉请求欢迎!
mhclient方法列表
对于接受一组关键字参数的方法,需要 kwargs直接从matterhorn端点映射。换句话说,如果你 要知道要将哪些kwargs用于mhclient.workflows() ,请检查相应的 在rest api文档中的条目位于 http://matterhorn.example.edu/docs.html?path=/workflow
- 端点() -/info/components.json
- me() -/info/me.json
- 工作流(**kwargs) -/workflow/instances.json
- 工作流(实例id) -/workflow/instance/{id}.json
- 集(**kwargs) -/集/集.json
- 插曲(插曲id) -/插曲/插曲.json
- 用户操作(**kwargs) -/usertracking/actions.json
- agents() -/capture admin/agents.json
- 代理(代理名称) -/capture-admin/agents/{agent-name}.json
- hosts() -/services/hosts.json
- 作业(作业id) -/services/job/{job id}.json
- 搜索集(**kwargs) -/search/sception.json
- 搜索插曲(插曲id) -/search/插曲.json
- statistics() -/services/statistics.json
示例用法
创建客户端界面…
>>>frompyhornimportMHClient>>>client=MHClient('http://matterhorn.example.edu','user','passwd')
user/pass组合应该用于rest api用户,通常是 "matterhorn_system_account"用户。可以创建和使用客户机 没有用户/过程组合的对象(省略构造函数参数),但是请求 仅适用于不需要验证的终结点(例如,事件搜索)
默认请求超时为5秒。将timeout=n传递给mhclient 构造器使用其他东西。
获取可用终结点的列表…
>>>client.endpoints()[{u'description':u'Capture Agent Admin REST Endpoint',u'docs':u'http://matterhorn.example.edu80/capture-admin/docs',u'path':u'/capture-admin',u'type':u'org.opencastproject.capture.admin',u'version':u'1.4.4',u'wadl':u'http://matterhorn.example.edu80/capture-admin/?_wadl&_type=xml'},{u'description':u'EpisodeService REST Endpoint',u'docs':u'http://matterhorn.example.edu80/episode/docs',u'path':u'/episode',u'type':u'org.opencastproject.episode',u'version':u'1.4.4',u'wadl':u'http://matterhorn.example.edu80/episode/?_wadl&_type=xml'},...
获取当前工作流实例的列表…
>>>wfs=client.workflows()>>>forwfinwfs:printwf.id+": "+wf.state1646:STOPPED1649:STOPPED1651:STOPPED1655:STOPPED4211:SUCCEEDED14479:SUCCEEDED14486:SUCCEEDED441:STOPPED445:STOPPED...
…或者仅仅是成功者…
>>>wfs=client.workflows(state="SUCCEEDED")
…或特定实例的操作…
>>>wf=client.workflow(instance_id=1646)>>>ops=wf.operations>>>foropinops:printop.id+": "+op.stateapply-acl:SUCCEEDEDtag:SUCCEEDEDtag:SUCCEEDEDinspect:SUCCEEDEDprepare-av:SUCCEEDEDprepare-av:SUCCEEDEDcompose:SUCCEEDEDcompose:SUCCEEDED...
获取当前配置的列表红色捕获代理
>>>cas=client.agents()>>>forcaincas:printca.name+": "+ca.stateepiphan001:unknownepiphan002:unknownewave001:idleewave002:idlencast001:idlencast002:shutting_down
端点对象包装器
pyhorn试图使matterhorn api响应更易于使用 通过将json响应数据包装在一组提供简单访问的类中 通过对象属性和关联数据的自动"解引用"。
定义了以下端点数据类:
- 工作流程
- 工作流操作
- 服务工作
- 插曲
- 媒体包
- 媒体跟踪
- 捕获代理
- 用户操作
- 搜索
这些只是初始设置,因为它们代表了我需要处理的数据 在其他促使创建pyhorn的项目中。这是微不足道的 添加其他包装类。拉请求欢迎!
属性访问
端点数据类继承自 pyhorn.endpoints.base.endpointobj 。这个 json响应数据存储在一个 \u raw 属性中,并通过 通过重写 .getattr>.一个简单的例子:
>>>frompyhorn.endpoints.baseimportEndpointObj>>>obj=EndpointObj({"foo":"bar","baz":[1,2,3]},client)>>>obj.foobar>>>obj.baz[1,2,3]>>>obj.abcTraceback......AttributeError:responsedatafor<class'pyhorn.endpoints.base.EndpointObj'> has no key 'abc'
此时,点表示法访问仅适用于顶级值。有一个endpointobj.raw_get方法 如果需要访问响应中更深层的内容,则接受一个 路径键 参数 结构。
>>>obj=EndpointObj({"foo":{"bar":{"baz":1}}})>>>obj.raw_get("foo.bar.baz")1
取消引用
在少数情况下,访问某些属性( @property ,实际上) 端点数据包装器对象的 将返回一个或多个不同包装类的实例。例如, workflow.operations 将从原始json和 返回包装单个操作的对象的列表 原始响应中包含的数据结构。
这也适用于取消引用需要对 马特霍恩API。例如,访问workflowoperation.job属性 触发对 /services/job/{job-id}.json的请求,并返回响应 被包装在一个 servicejob 对象中并返回。
这些解引用关系的当前列表是:
- 工作流操作 ->;工作流操作对象列表
- 工作流.作业 ->; 服务作业
- 工作流.集 ->; 集
- workflow.mediapack ->; mediapack
- 工作流操作.作业 ->; 服务作业
- 服务作业.父项 ->; 服务作业
- servicejob.children ->;对象列表
- 插曲.媒体包 ->; 媒体包
- mediapack.tracks ->;对象列表
- 用户操作.集 ->; 搜索集
设置维护模式
从v0.4.0开始,您可以在主机上切换维护模式。
pip install pyhorn0
缓存
从v0.7.0开始,请求缓存的使用已经被放弃,取而代之的是内部 存储来自单个项终结点子集的响应的缓存 方法。未来的目标是允许对缓存策略进行更细粒度的控制, 但现在缓存了以下端点响应:
- captureEndpoint.agent
- 情节终结点。情节
- searchendpoint.seeption
- workflow.instance
缓存通过端点方法上的decorator函数工作。json响应 matterhorn api中的数据缓存在内存中,每个条目都分配了一个 生存时间( ttl )值来控制过期时间。每个缓存的方法还具有 一个配置的 max_entries 值。如果/当条目数达到 限制剔除操作将删除现有条目的1/3。
要完全禁用缓存,请将 cache\u enabled=false 传递到 mhclient 建造商。
清除缓存调用
测试
在开发过程中,使用pytest执行pyhorn测试。
从本地git克隆运行测试:
pip install pyhorn1
那么
pip install pyhorn2
许可证
pyhorn是根据apache 2.0许可证授权的
版权所有
2015年哈佛大学校长和研究员
发布历史记录
0.1.0(2014-10-23)
-
出生!
0.1.1(2014-10-28)
- 版权调整
0.1.2(2014-10-28)
-
布莱克。忘记用最新版本的bump更新历史记录。
0.2.0(2014-11-12)
- 扩展的端点方法和包装器对象
- 更好的端点类测试覆盖率和fixture/mocking方法
0.3.0(2015-05-07)
useraction.sception现在从searchendpoint获取信息
- 用于获取插曲数据的新搜索终结点
- 新的客户端方法:search_seeption(),search_seeption()
0.3.1(2015-08-04)
客户端http异常处理中的错误修复
0.4.1(2015-08-27)
其他服务端点方法
- 基本服务列表和统计信息
- 获取排队/运行作业计数的方法
- 保养开/关
添加了请求超时
现在重新引发未处理的http异常
0.5.0(2015-10-30)
- 已将is_live()方法添加到用户操作
- 工作流现在是属性mediapackage objects
0.6.0(2016-04-14)
- 为情节搜索添加新的
0.7.0(2016-04-14)
- 取消了对请求缓存的死心使用
- 新的每端点方法缓存机制
0.8.0(2016-07-29)
- 允许在没有用户/密码验证的情况下创建和使用客户端 (注意:对于需要身份验证的端点,请求将失败)
0.8.1(2016-09-20)
- 搜索事件终结点缺少 排序 参数
0.9.0(2018-08-29)
- python 3兼容性!