diff options
author | Tim Graham <timograham@gmail.com> | 2018-08-27 10:26:29 -0400 |
---|---|---|
committer | Tim Graham <timograham@gmail.com> | 2019-02-01 15:55:49 -0500 |
commit | 5a50ef90852be2723e97b0bd4537fc8faa5f263f (patch) | |
tree | 258c3ae7d66ee49d89e6f73bbf0f0ff263ad1421 | |
parent | 951ee0b118eb640e6484189117be3308417d87bd (diff) | |
download | django-5a50ef90852be2723e97b0bd4537fc8faa5f263f.tar.gz |
[1.11.x] Replaced CVE/ticket roles with extlinks.
Backport of 44f98f78804627839d5f0a8b3a32bfbb4546ff52 from master.
-rw-r--r-- | docs/_ext/cve_role.py | 27 | ||||
-rw-r--r-- | docs/_ext/ticket_role.py | 39 | ||||
-rw-r--r-- | docs/conf.py | 12 |
3 files changed, 6 insertions, 72 deletions
diff --git a/docs/_ext/cve_role.py b/docs/_ext/cve_role.py deleted file mode 100644 index 254d3e679f..0000000000 --- a/docs/_ext/cve_role.py +++ /dev/null @@ -1,27 +0,0 @@ -""" -An interpreted text role to link docs to CVE issues. To use: :cve:`XXXXX` -""" -from docutils import nodes, utils -from docutils.parsers.rst import roles - - -def cve_role(name, rawtext, text, lineno, inliner, options=None, content=None): - if options is None: - options = {} - - url_pattern = inliner.document.settings.env.app.config.cve_url - if url_pattern is None: - msg = inliner.reporter.warning("cve not configured: please configure cve_url in conf.py") - prb = inliner.problematic(rawtext, rawtext, msg) - return [prb], [msg] - - url = url_pattern % text - roles.set_classes(options) - node = nodes.reference(rawtext, utils.unescape('CVE-%s' % text), refuri=url, **options) - return [node], [] - - -def setup(app): - app.add_config_value('cve_url', None, 'env') - app.add_role('cve', cve_role) - return {'parallel_read_safe': True} diff --git a/docs/_ext/ticket_role.py b/docs/_ext/ticket_role.py deleted file mode 100644 index 809b4239b2..0000000000 --- a/docs/_ext/ticket_role.py +++ /dev/null @@ -1,39 +0,0 @@ -""" -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) - return {'parallel_read_safe': True} diff --git a/docs/conf.py b/docs/conf.py index 62e337dceb..495eda0858 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -42,12 +42,16 @@ needs_sphinx = '1.3' # Actually 1.3.4, but micro versions aren't supported here # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = [ "djangodocs", + 'sphinx.ext.extlinks', "sphinx.ext.intersphinx", "sphinx.ext.viewcode", - "ticket_role", - "cve_role", ] +extlinks = { + 'cve': ('https://nvd.nist.gov/view/vuln/detail?vulnId=%s', 'CVE-'), + 'ticket': ('https://code.djangoproject.com/ticket/%s', '#'), +} + # Spelling check needs an additional module that is not installed by default. # Add it only if spelling check is requested so docs can be generated without it. if 'spelling' in sys.argv: @@ -371,7 +375,3 @@ epub_cover = ('', 'epub-cover.html') # If false, no index is generated. # epub_use_index = True - -# -- custom extension options -------------------------------------------------- -cve_url = 'https://nvd.nist.gov/view/vuln/detail?vulnId=%s' -ticket_url = 'https://code.djangoproject.com/ticket/%s' |