[[PageOutline]] = Trac XML-RPC Plugin = == Description == '''*** Please note that this is still alpha software, so the API may change ***''' 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. [http://www.jspwiki.org/Wiki.jsp?page=WikiRPCInterface2 WikiRPC API] is complete, mostly thanks to [wiki: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 (?), plugin management (?)...plus probably more. == Installation == This plugin ''requires'' the current trunk of Trac ([T2997] as of this writing). 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 }}} == Bugs/Feature Requests == Existing bugs and feature requests for XmlRpcPlugin are [report:9?COMPONENT=XmlRpcPlugin here]. If you have any issues, create a [http://trac-hacks.org/newticket?component=XmlRpcPlugin&owner=athomas new ticket]. == Download == Download the zipped source from [download:xmlrpcplugin here]. == Source == You can check out the source for XmlRpcPlugin using Subversion from [http://trac-hacks.org/svn/xmlrpcplugin here] or [source:xmlrpcplugin browse the source] with Trac. == Example == === End-User Usage === Obtain and print a list of XML-RPC exported functions available to my user: {{{ #!python 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. {{{ #!python import xmlrpclib server = xmlrpclib.ServerProxy("http://athomas:password@localhost/trac-dev/login/xmlrpc") methods = server.system.listMethods() method_help = server.system.multicall([{'methodName': 'system.methodHelp', 'params': [method]} for method in methods]) for help in method_help: 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: {{{ #!python import xmlrpclib server = xmlrpclib.ServerProxy("http://athomas:password@localhost/trac-dev/login/xmlrpc") tickets = server.ticket.query("owner=athomas") print '\n'.join(map(str, server.system.multicall([{'methodName' : 'ticket.get', 'params' : [ticket]} for ticket in tickets]))) }}} Access the Wiki with [http://www.jspwiki.org/Wiki.jsp?page=WikiRPCInterface2 WikiRPC] {{{ #!python 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"}) }}} === API Usage === See the [source:xmlrpcplugin/0.10/tracrpc/api.py 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. http://trac-hacks.org/attachment/wiki/XmlRpcPlugin/tracrpc.png?format=raw == Author/Contributors == '''Author:''' [wiki:athomas] [[BR]] '''Contributors:''' [wiki:mgood] [[BR]] [[TagIt(plugin,athomas,mgood,alpha,0.10)]]