[[PageOutline]] = 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. [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 (e.g. get a (filtered) user list to assign a task in [http://eclipse.org/mylar 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 [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/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: {{{ #!python 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 [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"}) }}} Add an attachment to WikiStart: {{{ #!python 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: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. [[Image(tracrpc.png)]] == Change Log == [[ChangeLog(/xmlrpcplugin, 5)]] == Author/Contributors == '''Author:''' [wiki:athomas] [[BR]] '''Contributors:''' [wiki:mgood] [[BR]] [[TagIt(plugin,athomas,mgood,alpha,0.10)]]