diff --git a/NEWS b/NEWS index 2f71a374..cb02aee9 100644 --- a/NEWS +++ b/NEWS @@ -122,7 +122,7 @@ What's new in psycopg 2.4.6 - 'register_hstore()', 'register_composite()', 'tpc_recover()' work with RealDictConnection and Cursor (:ticket:`#114`). - Fixed broken pool for Zope and connections re-init across ZSQL methods - in the same request (tickets #123, #125, #142). + in the same request (:tickets:`#123, #125, #142`). - connect() raises an exception instead of swallowing keyword arguments when a connection string is specified as well (:ticket:`#131`). - Discard any result produced by 'executemany()' (:ticket:`#133`). @@ -144,7 +144,7 @@ What's new in psycopg 2.4.5 - Error and its subclasses are picklable, useful for multiprocessing interaction (:ticket:`#90`). - Better efficiency and formatting of timezone offset objects thanks - to Menno Smits (tickets #94, #95). + to Menno Smits (:tickets:`#94, #95`). - Fixed 'rownumber' during iteration on cursor subclasses. Regression introduced in 2.4.4 (:ticket:`#100`). - Added support for 'inet' arrays. diff --git a/doc/src/tools/lib/ticket_role.py b/doc/src/tools/lib/ticket_role.py index 28900661..d8ded227 100644 --- a/doc/src/tools/lib/ticket_role.py +++ b/doc/src/tools/lib/ticket_role.py @@ -8,45 +8,52 @@ :copyright: Copyright 2013 by Daniele Varrazzo. """ +import re from docutils import nodes, utils from docutils.parsers.rst import roles def ticket_role(name, rawtext, text, lineno, inliner, options={}, content=[]): - 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] - cfg = inliner.document.settings.env.app.config - url_pattern = cfg.ticket_url - if url_pattern is None: + if cfg.ticket_url 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] - # Push numbers of the oldel tickets ahead. - # We moved the tickets from a different tracker to GitHub and the - # latter already had a few ticket numbers taken (as merge - # requests). - remap_until = cfg.ticket_remap_until - remap_offset = cfg.ticket_remap_offset - if remap_until and remap_offset: - if num <= remap_until: - num += remap_offset + rv = [nodes.Text(name + ' ')] + tokens = re.findall(r'(#?\d+)|([^\d#]+)', text) + for ticket, noise in tokens: + if ticket: + num = int(ticket.replace('#', '')) + + # Push numbers of the oldel tickets ahead. + # We moved the tickets from a different tracker to GitHub and the + # latter already had a few ticket numbers taken (as merge + # requests). + remap_until = cfg.ticket_remap_until + remap_offset = cfg.ticket_remap_offset + if remap_until and remap_offset: + if num <= remap_until: + num += remap_offset + + url = cfg.ticket_url % num + roles.set_classes(options) + node = nodes.reference(ticket, utils.unescape(ticket), + refuri=url, **options) + + rv.append(node) + + else: + assert noise + rv.append(nodes.Text(noise)) + + return rv, [] - url = url_pattern % num - roles.set_classes(options) - node = nodes.reference(rawtext, 'ticket ' + utils.unescape(text), - refuri=url, **options) - return [node], [] def setup(app): app.add_config_value('ticket_url', None, 'env') app.add_config_value('ticket_remap_until', None, 'env') app.add_config_value('ticket_remap_offset', None, 'env') app.add_role('ticket', ticket_role) + app.add_role('tickets', ticket_role)