Roundup

XML-RPC access to Roundup

Introduction

Version 1.4 of Roundup includes an XML-RPC frontend for remote access. The XML-RPC interface allows a limited subset of commands similar to those found in local roundup-admin tool.

By default XML-RPC is accessible from /xmlrpc endpoint:

http://username:password@localhost:8000/xmlrpc

For demo tracker the URL would be:

http://localhost:8917/demo/xmlrpc

Enabling XML-RPC server

There are two ways to run the XML-RPC interface:

stand alone roundup-xmlrpc-server

through roundup itself

stand alone roundup-xmlrpc-server

The Roundup XML-RPC standalone server must be started before remote clients can access the tracker via XML-RPC. roundup-xmlrpc-server is installed in the scripts directory alongside roundup-server and roundup-admin``. When invoked, the location of the tracker instance must be specified.

roundup-xmlrpc-server -i /path/to/tracker

The default port is 8000. An alternative port can be specified with the --port switch.

through roundup

In addition to running a stand alone server described above, the XML-RPC service is available from the roundup HTTP server.

security consideration

Note that the current roundup-xmlrpc-server implementation does not support SSL. This means that usernames and passwords will be passed in cleartext unless the server is being proxied behind another server (such as Apache or lighttpd) that provide SSL.

Client API

The server currently implements four methods. Each method requires that the user provide a username and password in the HTTP authorization header in order to authenticate the request against the tracker.

Command Description
schema Fetch tracker schema.
list

arguments: classname, [property_name]

List all elements of a given classname. If property_name is specified, that is the property that will be displayed for each element. If property_name is not specified the default label property will be used.

display

arguments: designator, [property_1, ..., property_N]

Display a single item in the tracker as specified by designator (e.g. issue20 or user5). The default is to display all properties for the item. Alternatively, a list of properties to display can be specified.

create

arguments: classname, arg_1 ... arg_N

Create a new instance of classname with arg_1 through arg_N as the values of the new instance. The arguments are name=value pairs (e.g. status='3').

set

arguments: designator, arg_1 ... arg_N

Set the values of an existing item in the tracker as specified by designator. The new values are specified in arg_1 through arg_N. The arguments are name=value pairs (e.g. status='3').

lookup

arguments: classname, key_value

looks up the key_value for the given class. The class needs to have a key and the user needs search permission on the key attribute and id for the given classname.

filter

arguments: classname, list or None, attributes

list is a list of ids to filter. It can be set to None to run filter over all values (requires allow_none=True when instantiating the ServerProxy). The attributes are given as a dictionary of name value pairs to search for. See also Entering values in your Tracker.

sample python client

>>> import xmlrpclib
>>> roundup_server = xmlrpclib.ServerProxy('http://admin:admin@localhost:8917/demo/xmlrpc', allow_none=True)
>>> roundup_server.schema()
{'user': [['username', '<roundup.hyperdb.String>'], ...], 'issue': [...]}
>>> roundup_server.list('user')
['admin', 'anonymous', 'demo']
>>> roundup_server.list('issue', 'id')
['1']
>>> roundup_server.display('issue1')
{'assignedto' : None, 'files' : [], 'title' = 'yes, ..... }
>>> roundup_server.display('issue1', 'priority', 'status')
{'priority' : '1', 'status' : '2'}
>>> roundup_server.set('issue1', 'status=3')
>>> roundup_server.display('issue1', 'status')
{'status' : '3' }
>>> roundup_server.create('issue', "title='another bug'", "status=2")
'2'
>>> roundup_server.filter('user',None,{'username':'adm'})
['1']
>>> roundup_server.filter('user',['1','2'],{'username':'adm'})
['1']
>>> roundup_server.filter('user',['2'],{'username':'adm'})
[]
>>> roundup_server.filter('user',[],{'username':'adm'})
[]
>>> roundup_server.lookup('user','admin')
'1'