有没有办法从trac远程查询票证

时间:2012-12-28 06:55:33

标签: xml-rpc trac

我有一个在http://127.0.0.1:8001/project/运行的trac服务器 然后我想通过脚本而不是从Web UI查询票证。所以我在互联网上搜索并获得插件tracxmlrpc,我将其安装在我的trac服务器中,然后我尝试使用脚本来查询票证。代码如下:

import xmlrpclib
server = xmlrpclib.ServerProxy('http://user:111@127.0.0.1:8001/project/login/xmlrpc')
tickets = server.ticket.query('max=0')

但是这段代码不起作用,谁可以告诉我如何使它工作,或者是否有其他方法来实现远程查询功能。

2 个答案:

答案 0 :(得分:0)

当然可以奏效。就像你预期的那样。以下是我的验证,其中包含关键配置详细信息:

  1. http://127.0.0.1:8000/trac/
  2. 托管的空测试项目
  3. 项目配置为使用基本身份验证,这是Python xmlrpclib唯一支持的内容。
  4. 密码为'foo'的用户'bar'同时具有XML_RPC权限(允许通过API进行调用),并允许TICKET_VIEW权限查看故障单。< / LI>
  5. 我创建了2张门票,#1#2仍处于打开状态时关闭。
  6. 互动代码:

    >>> import xmlrpclib
    >>> server = xmlrpclib.ServerProxy('http://foo:bar@127.0.0.1:8000/trac/login/rpc')
    >>> server.ticket.query('max=0')
    [1, 2]
    >>> server.ticket.query('max=0&status!=closed')
    [2]
    >>> server.ticket.get(2)
    [2,
     <DateTime '20130104T11:48:08' at 10392c2d8>,
     <DateTime '20130104T11:48:08' at 10392c320>,
     {'_ts': '1357300088007920',
      'cc': '',
      'changetime': <DateTime '20130104T11:48:08' at 10392c368>,
      'component': 'component1',
      'description': '',
      'keywords': '',
      'milestone': 'milestone1',
      'owner': '',
      'priority': 'major',
      'reporter': 'admin',
      'resolution': '',
      'status': 'new',
      'summary': 'stackoverflow test',
      'time': <DateTime '20130104T11:48:08' at 10392c3b0>,
      'type': 'defect',
      'version': ''}]
    

    这通常始终与身份验证或权限相关,因此要验证RPC插件和查询是否有效,您可以临时为用户XML_RPC分配TICKET_VIEWanonymous权限,并使用此服务器代替(从网址中删除foo:bar@/login):

    server = xmlrpclib.ServerProxy('http://127.0.0.1:8000/trac/rpc')
    

答案 1 :(得分:0)

无耻插件,但我编写了一个PHP库,通过远程过程调用与Trac Bugtracker API进行交互。

https://github.com/jakoch/PHPTracRPC

要求

  • PHP 5.3.0或更高版本
  • 使用PHP扩展“JSON”和“cURL”
  • 使用XmlRpcPlugin进行Trac

基本用法示例

include 'TracRPC.php';

$credentials = array('username' => 'username', 'password' => 'password'); 

$trac = new TracRPC('http://trac.example.com/login/jsonrpc', $credentials);

$result = $trac->getTicket('32');