Koji的Twisted API
txkoji的Python项目详细描述
使用twisted与koji异步接口
使用Twisted异步(非阻塞)访问Koji的XML-RPCAPI 框架。
这支持gssapi或客户端ssl登录方法。
简单示例:获取用户名
fromtxkojiimportConnectionfromtwisted.internetimportdeferfromtwisted.internet.taskimportreact@defer.inlineCallbacksdefexample(reactor):koji=Connection('brew')# Fetch a user.# You may pass an ID or a krb principal hereuser=yieldkoji.getUser(3595)# user is a Munch (dict-like) object.print(user.name)if__name__=='__main__':react(example)
连接到Koji集线器
要连接到koji集线器,请创建一个新的txkoji.Connection实例。
必须将字符串传递给构造函数。此字符串是配置文件名。为了 例如,如果调用Connector('mykoji'),则txkoji将搜索 ^的{tt3}$和/etc/koji.conf.d/*.conf。 [mykoji]config节。这与普通的koji客户端代码相匹配 做。
进行XML-RPC调用
Koji Hub是一个XML-RPC服务器。可以调用^{tt6}上的任何方法$ 类实例和txkoji将把它当作对集线器的xml-rpc调用。为了 例如,这个扭曲的inlineCallbacks样式的代码查找有关 给定的任务ID和标记ID:
@defer.inlineCallbacksdefexample(reactor):koji=Connection('mykoji')task=yieldkoji.getTaskInfo(10000)print(task.method)# "createImage"tag=yieldkoji.getTag(2000)print(tag.name)# "foo-build"
学习完整的koji xml-rpc api:
koji list-api
您还可以阅读koji source code来查找 详细说明每种方法的工作原理。
登录
您的koji集线器必须支持gssapi或客户端ssl身份验证。你一定有一个 有效的kerberos票证或ssl密钥对。
@defer.inlineCallbacksdefexample(reactor):koji=Connection('mykoji')result=yieldlogin()print(result)# "True"print('session-id: %s'%koji.session_id)# "Who am I?"user=yieldkoji.getLoggedInUser()print(user)
估计构建持续时间
txkoji.estimates模块提供了估算构建时间的方法。 average_build_duration()方法调用koji的 getAverageBuildDurationrpc并为 包裹。对于容器包,我们使用 average_last_builds()方法,平均最后五个生成的持续时间。
缓存长寿命对象名
有时你只需要一个用户ID号或标签ID号,你需要 改为用户名或标记名。
txkoji包括用于获取用户名或标记名的读取缓存。 有关示例,请参见examples/cache.py。txkoji的缓存模块存储其数据 在用指定的位置的txkoji子目录中 $XDG_CACHE_HOME如果已设置环境变量。它会回到 如果$XDG_CACHE_HOME环境变量是 未设置。
富对象
以下rpc方法将返回从 咀嚼类:
- getBuild返回txkoji.build.Build
- getChannel返回txkoji.channel.Channel
- listBuilds返回list的txkoji.build.Build
- getTaskInfo返回txkoji.task.Task
- getPackage返回txkoji.package.Package
这些类有自己的特殊助手方法来实现我发现的东西 有趣:
- datetime开始/完成时间戳的转换,
- url用于表示kojiweb中的对象的属性,
- 跨任务方法的统一属性属性,如tag、package或 is_scratch。
更多特殊返回值:
- getAverageBuildDuration返回一个datetime.timedelta对象 一个原始的浮点数,因为这是更有用的时间算术。
- task_id属性填充在OSB的CG容器构建中(a 解决方法是https://pagure.io/koji/issue/215)。
消息解析
Koji的MessageBus插件在发生某些事件时向AMQP代理发出消息 发生了。txkoji.messages模块支持解析这些消息 进入相关的txkojiTask或Build类。
待办事项:
- 为其他可能的XML-RPC错误提供更多的KojiException子类?
- 实现krbv身份验证(除非有替代方法 Python克尔勃)。
- MikeM noted, callnum参数需要特殊处理。我们可能需要扭曲的 DeferredLock以确保一次只能运行一个身份验证的rpc。 我不太清楚我们是否真的能在这里碰到一个callnum错误。更多 这需要集成测试。
- 确保brew的“构建时间”等于 任务,而不是别的东西,比如从scm time构建srpm,甚至 总体生成任务的时间。这对估计划痕有意义 建立。(将任务的时间与GetAverageBuildDuration进行比较)
- 多通话支持