跳转到主要内容

Twisted API for Koji

项目描述

使用Twisted的Koji异步接口

https://travis-ci.org/ktdreyer/txkoji.svg?branch=master https://badge.fury.io/py/txkoji.svg

异步(非阻塞)方式访问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 属性,

  • 在任务方法中统一属性属性,如 tagpackageis_scratch

更多特殊返回值

  • getAverageBuildDuration 返回一个 datetime.timedelta 对象,而不是原始浮点数,因为这在进行时间算术时更有用。

  • 在 OSBS 的 CG 容器构建中填充 task_id 属性(这是 https://pagure.io/koji/issue/215 的一个解决方案)。

消息解析

当发生某些事件时,Koji 的 messagebus 插件会向 AMQP 代理发送消息。模块 txkoji.messages 支持将这些消息解析为相关的 txkoji TaskBuild 类。

待办事项

  • 更多 KojiException 子类以处理其他可能的 XML-RPC 错误?

  • 实现 krbV 认证(除非有 python-krbV 的替代方案,否则可能不会实现)。

  • MikeM 注意到,需要特别处理 callnum 参数。我们可能需要 Twisted 的 DeferredLock 来确保一次只有一个已授权的 RPC 在飞行中。我不太清楚我们是否真的会遇到一个 callnum 错误。需要对此进行更多的集成测试。

  • 确保 Brew 的“构建时间”等于任务的最长“构建Arch”时间,而不是其他时间,如构建SRPMFromSCM时间,甚至整个构建任务的时间。这对估算 Scratch 构建(比较我们的任务时间与 getAverageBuildDuration)有影响。

  • 多调用支持

使用此软件包的软件包

项目详情


下载文件

下载适用于您平台文件的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

txkoji-0.10.0.tar.gz (23.3 kB 查看哈希值)

上传时间

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页