Trac XML-RPC Plugin
Description
This plugin allows Trac plugins to export select parts of their interface via XML-RPC.
It also includes some exported functions for manipulating tickets, with plans to include interfaces to other parts of Trac's API.
The browsable XML-RPC URI suffix is /xmlrpc, however most XML-RPC clients should use the authenticated URL suffix /login/xmlrpc as this is correctly authenticated by Trac.
Note: if you do want to use /xmlprc and unauthenticated access, you must grant the XML_RPC permission to the 'anonymous' user.
WikiRPC API is complete, mostly thanks to mgood.
Ticket API is also complete, with the following types exported: component, version, milestone, type, status, resolution, priority and severity.
For example, for TracHacks the URIs are http://trac-hacks.org/xmlrpc and http://trac-hacks.org/login/xmlrpc (must be authenticated).
Todo
Outstanding tasks are roadmap, timeline, user management (e.g. get a (filtered) user list to assign a task in mylar), plugin management (?)…plus probably more.
Installation
This plugin requires at least Trac 0.10. It will not work with Trac 0.9.x or earlier.
Install in the same manner as any other Trac plugin:
# python setup.py bdist_egg # cp dist/*.egg /srv/trac/env/plugins
You will also probably need to enable the plugin in your environments trac.ini:
[components] tracrpc.* = enabled
Problems when AccountManagerPlugin is enabled
If you have the AccountManagerPlugin enabled and you followed their advise/example to disable the standard login module with
[components] trac.web.auth.LoginModule = disabled
the /login/xmlrpc URL for authorized access will not work as expected. Every access will look like anonymous access.
You can use the HttpAuthPlugin to correct this.
Bugs/Feature Requests
Existing bugs and feature requests for XmlRpcPlugin are here.
If you have any issues, create a new ticket.
Download
Download the zipped source from here.
Source
You can check out the source for XmlRpcPlugin using Subversion from here or browse the source with Trac.
Example
End-User Usage
Obtain and print a list of XML-RPC exported functions available to my user:
import xmlrpclib server = xmlrpclib.ServerProxy("http://athomas:password@localhost/trac-dev/login/xmlrpc") for method in server.system.listMethods(): print method print '\n'.join([' ' + x for x in server.system.methodHelp(method).split('\n')]) print print
The same example using system.multicall(). This reduces network and server load by compacting all of the system.methodHelp() calls into one HTTP POST.
import xmlrpclib server = xmlrpclib.ServerProxy("http://athomas:password@localhost/trac/devel/login/xmlrpc") multicall = xmlrpclib.MultiCall(server) for method in server.system.listMethods(): multicall.system.methodHelp(method) for help in multicall(): lines = help.splitlines() print lines[0] print '\n'.join([' ' + x for x in lines[2:]]) print
List all tickets that are owned by athomas, using the XML-RPC multicall system to issue multiple RPC calls with one HTTP request:
import xmlrpclib server = xmlrpclib.ServerProxy("http://athomas:password@localhost/trac/devel/login/xmlrpc") multicall = xmlrpclib.MultiCall(server) for ticket in server.ticket.query("owner=athomas"): multicall.ticket.get(ticket) print map(str, multicall())
Access the Wiki with WikiRPC
import xmlrpclib server = xmlrpclib.ServerProxy("http://athomas:password@localhost/trac-dev/login/xmlrpc") # print the content of WikiStart print server.wiki.getPage("WikiStart") # print WikiStart as HTML print server.wiki.getPageHTML("WikiStart") # write to the SandBox page from a text file sandbox_content = file("sandbox.txt").read() server.wiki.putPage("SandBox", sandbox_content, {"comments": "testing the WikiRPC interface"})
Add an attachment to WikiStart:
import xmlrpclib server = xmlrpclib.ServerProxy("http://athomas:password@localhost:8080/trunk/login/xmlrpc") server.wiki.putAttachment('WikiStart/t.py', xmlrpclib.Binary(open('t.py').read()))
API Usage
See the source for details.
Screenshot
If the HTTP request to this URI is not XML, the XmlRpcPlugin will list all exported functions that the current user has permission to use.
Change Log
[1735] by athomas on 12/25/06 00:37:46
Applied patches from gotoh and stp, thanks. Closes #434 and #845.
[1732] by athomas on 12/24/06 17:08:15
Fixes #953. Thanks to David Smith for picking this up.
[1519] by athomas on 11/11/06 10:05:13
Close script tag. Fixes #882.
[1278] by athomas on 09/19/06 21:01:15
- Added system.getAPIVersion(). Returns a two element tuple containing the Trac XML-RPC version number. Closes #652 (refer to this ticket for semantics).
- Added ticket.getTicketFields(). Forwards directly to TicketSystem().get_ticket_fields(). Closes #651.
- Fixed #723.
[1188] by athomas on 08/26/06 12:27:53
Applied patch submitted by steffenp@gmx.de, with some modifications. This adds ticket.getRecentChanges() and ticket.getAvailableActions(). Changed wiki.putAttachment() to be completely compatible with WikiRPC, and added wiki.putAttachmentEx() for Trac specific extensions.
Author/Contributors
Attachments
- tracrpc.png (94.4 kB) - added by athomas on 12/27/05 23:47:29.