diff options
| author | Tim Graham <timograham@gmail.com> | 2014-08-19 10:22:51 -0400 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2014-08-19 17:40:50 -0400 |
| commit | fca677fa438879cbb3ebb828268cb2b976e514d8 (patch) | |
| tree | ee3e5308704b19afaea94ba37b8cab761084f74f /docs/_ext | |
| parent | 5f2542f12a90cfcfb7be776424ef2f7b200df006 (diff) | |
Added sphinx extension to ease generation of ticket links.
Diffstat (limited to 'docs/_ext')
| -rw-r--r-- | docs/_ext/ticket_role.py | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/docs/_ext/ticket_role.py b/docs/_ext/ticket_role.py new file mode 100644 index 0000000000..b53778558e --- /dev/null +++ b/docs/_ext/ticket_role.py @@ -0,0 +1,38 @@ +""" +An interpreted text role to link docs to Trac tickets. + +To use: :ticket:`XXXXX` + +Based on code from psycopg2 by Daniele Varrazzo. +""" +from docutils import nodes, utils +from docutils.parsers.rst import roles + + +def ticket_role(name, rawtext, text, lineno, inliner, options=None, content=None): + if options is None: + options = {} + try: + num = int(text.replace('#', '')) + except ValueError: + msg = inliner.reporter.error( + "ticket number must be... a number, got '%s'" % text) + prb = inliner.problematic(rawtext, rawtext, msg) + return [prb], [msg] + + url_pattern = inliner.document.settings.env.app.config.ticket_url + if url_pattern is None: + msg = inliner.reporter.warning( + "ticket not configured: please configure ticket_url in conf.py") + prb = inliner.problematic(rawtext, rawtext, msg) + return [prb], [msg] + + url = url_pattern % num + roles.set_classes(options) + node = nodes.reference(rawtext, '#' + utils.unescape(text), refuri=url, **options) + return [node], [] + + +def setup(app): + app.add_config_value('ticket_url', None, 'env') + app.add_role('ticket', ticket_role) |
