Twisted API for Koji
项目描述
使用Twisted的Koji异步接口
异步(非阻塞)方式访问Koji的XML-RPC API,使用Twisted框架。
支持GSSAPI或客户端SSL登录方法。
简单示例:获取用户名称
from txkoji import Connection
from twisted.internet import defer
from twisted.internet.task import react
@defer.inlineCallbacks
def example(reactor):
koji = Connection('brew')
# Fetch a user.
# You may pass an ID or a krb principal here
user = yield koji.getUser(3595)
# user is a Munch (dict-like) object.
print(user.name)
if __name__ == '__main__':
react(example)
连接到Koji Hub
要连接到Koji Hub,创建一个新的txkoji.Connection实例。
必须向构造函数传递一个字符串。此字符串是配置文件名称。例如,如果您调用Connector('mykoji'),则txkoji将搜索~/.koji/config.d/*.conf和/etc/koji.conf.d/*.conf中的[mykoji]配置部分。这与常规Koji客户端代码的行为一致。
执行XML-RPC调用
Koji Hub是一个XML-RPC服务器。您可以在Connection类实例上调用任何方法,txkoji会将它视为对Hub的XML-RPC调用。例如,以下Twisted inlineCallbacks-style代码查找特定任务ID和标签ID的信息
@defer.inlineCallbacks
def example(reactor):
koji = Connection('mykoji')
task = yield koji.getTaskInfo(10000)
print(task.method) # "createImage"
tag = yield koji.getTag(2000)
print(tag.name) # "foo-build"
了解完整的Koji XML-RPC API
koji list-api
您还可以阅读koji源代码以了解每个方法的工作细节。
登录
您的Koji Hub必须支持GSSAPI或客户端SSL身份验证。您必须拥有有效的Kerberos票据或SSL密钥对。
@defer.inlineCallbacks
def example(reactor):
koji = Connection('mykoji')
result = yield login()
print(result) # "True"
print('session-id: %s' % koji.session_id)
# "Who am I?"
user = yield koji.getLoggedInUser()
print(user)
估算构建持续时间
txkoji.estimates 模块提供了估算构建时间的方法。函数 average_build_duration() 调用 Koji 的 getAverageBuildDuration RPC,并为一个软件包返回一个 datetime.timedelta 对象。对于容器软件包,我们通过客户端的 average_last_builds() 方法进行类似的操作,平均计算最近五次构建的持续时间。
缓存长期对象名称
有时候你只有用户 ID 或标签 ID,而你需要的是用户的名称或标签的名称。
txkoji 包含一个读取缓存来获取用户名称或标签名称。请参阅 examples/cache.py 以获取示例。txkoji 的缓存模块将其数据存储在由环境变量 $XDG_CACHE_HOME 指定的位置的 txkoji 子目录中,如果设置了该环境变量。如果没有设置 $XDG_CACHE_HOME 环境变量,它将回退到使用 ~/.cache/txkoji。
丰富对象
以下 RPC 方法将返回继承自 Munch 类的特殊类
getBuild 返回 txkoji.build.Build
getChannel 返回 txkoji.channel.Channel
listBuilds 返回一个 list,其中包含 txkoji.build.Build
getTaskInfo 返回 txkoji.task.Task
getPackage 返回 txkoji.package.Package
这些类具有自己的特殊辅助方法,用于实现我发现有趣的功能
开始/完成时间戳的 datetime 转换,
表示 Kojiweb 中对象的 url 属性,
在任务方法中统一属性属性,如 tag、package 或 is_scratch。
更多特殊返回值
getAverageBuildDuration 返回一个 datetime.timedelta 对象,而不是原始浮点数,因为这在进行时间算术时更有用。
在 OSBS 的 CG 容器构建中填充 task_id 属性(这是 https://pagure.io/koji/issue/215 的一个解决方案)。
消息解析
当发生某些事件时,Koji 的 messagebus 插件会向 AMQP 代理发送消息。模块 txkoji.messages 支持将这些消息解析为相关的 txkoji Task 或 Build 类。
待办事项
更多 KojiException 子类以处理其他可能的 XML-RPC 错误?
实现 krbV 认证(除非有 python-krbV 的替代方案,否则可能不会实现)。
MikeM 注意到,需要特别处理 callnum 参数。我们可能需要 Twisted 的 DeferredLock 来确保一次只有一个已授权的 RPC 在飞行中。我不太清楚我们是否真的会遇到一个 callnum 错误。需要对此进行更多的集成测试。
确保 Brew 的“构建时间”等于任务的最长“构建Arch”时间,而不是其他时间,如构建SRPMFromSCM时间,甚至整个构建任务的时间。这对估算 Scratch 构建(比较我们的任务时间与 getAverageBuildDuration)有影响。
多调用支持
使用此软件包的软件包
项目详情
txkoji-0.10.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b9c4ee5cf3e349d103647a6cae41feb1feb944d20d83311c37d4add5d6ea64c3 |
|
MD5 | 530963b4e6ea3f42acbba94c3cbf5ba6 |
|
BLAKE2b-256 | 8f0d5602b85cc95cb77a4bd33a48227bf7275b1969a33855b550271414dca47c |