Koji的Twisted API

txkoji的Python项目详细描述


使用twisted与koji异步接口 https://travis-ci.org/ktdreyer/txkoji.svg?branch=masterhttps://badge.fury.io/py/txkoji.svg

使用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返回listtxkoji.build.Build
  • getTaskInfo返回txkoji.task.Task
  • getPackage返回txkoji.package.Package

这些类有自己的特殊助手方法来实现我发现的东西 有趣:

  • datetime开始/完成时间戳的转换,
  • url用于表示kojiweb中的对象的属性,
  • 跨任务方法的统一属性属性,如tagpackageis_scratch

更多特殊返回值:

  • getAverageBuildDuration返回一个datetime.timedelta对象 一个原始的浮点数,因为这是更有用的时间算术。
  • task_id属性填充在OSB的CG容器构建中(a 解决方法是https://pagure.io/koji/issue/215)。

消息解析

Koji的MessageBus插件在发生某些事件时向AMQP代理发出消息 发生了。txkoji.messages模块支持解析这些消息 进入相关的txkojiTaskBuild类。

待办事项:

  • 为其他可能的XML-RPC错误提供更多的KojiException子类?
  • 实现krbv身份验证(除非有替代方法 Python克尔勃)。
  • MikeM noted, callnum参数需要特殊处理。我们可能需要扭曲的 DeferredLock以确保一次只能运行一个身份验证的rpc。 我不太清楚我们是否真的能在这里碰到一个callnum错误。更多 这需要集成测试。
  • 确保brew的“构建时间”等于 任务,而不是别的东西,比如从scm time构建srpm,甚至 总体生成任务的时间。这对估计划痕有意义 建立。(将任务的时间与GetAverageBuildDuration进行比较)
  • 多通话支持

使用此软件包的软件包

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

推荐PyPI第三方库


热门话题
java GridBagLayout不填充区域   java Memozied Fibonacci未运行与常规Fibonacci解决方案   Java Web启动未启动问题   Java中异常和if-then的区别   java从命令提示符运行批处理文件获取错误   socket在Java中验证SSL证书的公共名称   如何在JAVA中检查字符串数组中的相等字   用java语言将音频文件转换成文本文件的语音识别   java为什么foo(1,2,3)没有传递给varargs方法foo(对象…)作为整数[]   java通过蓝牙将奇怪的数据从Arduino传输到Android   java ContainerRequestFilter获取空entitystream   java如何从安卓 studio中删除不兼容类型错误   基本Java错误   在Spring引导中使用REST API时发生java错误   javascript通过从SQL查询派生的URL打开页面