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 pyhorn
0

缓存

从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 pyhorn
1

那么

pip install pyhorn
2

许可证

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兼容性!

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在jetty请求日志中添加milliscond字段?   java在使用Scanner类从文件读取信息时遇到问题   为什么。类不适用于泛型类型?   SQLite插入上的java空指针异常   java能告诉我们Guava缓存是在禁用统计数据的情况下构建的吗?   java在应用程序中使用常量   java无法使用AutoIT和Selenium Webdriver在所需位置/文件夹保存图像   java如何在jtable中更新jprogress栏   java是比较给定日期和当前日期(在给定时区中没有时间段)的最佳方法   安卓代码中的java错误   java无法访问实体类中的字段   java如何在tomcat中处理三个JDBC连接池?   java无法使用Spring Security保护AngularJS页面   如何在没有TCP/IP协议栈的情况下用Java发送以太帧