Sphinx - generate automatic references to Trac tickets and changesets

python, python-sphinx, restructuredtext, trac

Solution

If you put this in your config.py

trac_url = 'http://mytratsite/'

from docutils import nodes, utils
from docutils.parsers.rst import roles
import urllib

def trac_role(role, rawtext, text, lineno, inliner, options={}, content=[]):
  ref = trac_url + '/intertrac/' + urllib.quote(text, safe='')
  node = nodes.reference(rawtext, utils.unescape(text), refuri=ref, **options)
  return [node],[]

roles.register_canonical_role('trac', trac_role)

Then you can use `:trac:`#123`` and `:trac:`r1023`` in your documents.

This is probably the easiest way to make quick links to a trac site. It automatically works for all kinds of TracLinks because it uses the intertrac mechanism for the links.

Problem

Is Sphinx, is there way to automatically link text like `#112` or `r1023` to the corresponding tickets/changesets in Trac? For eg: ``` #112 -> http://mytracsite/tickets/112 r1023 -> http://mytracsite/changeset/1023 ``` See TracLinks for more examples.

Original source