aboutsummaryrefslogtreecommitdiffstats
path: root/linkify.py
diff options
context:
space:
mode:
authorJason R. Coombs <jaraco@jaraco.com>2014-12-30 11:39:07 -0500
committerJason R. Coombs <jaraco@jaraco.com>2014-12-30 11:39:07 -0500
commitcaea578cd02a7cb2f7cfa453dfabff66e56aff8d (patch)
tree0ed5a5d71c90be4fc241fa55120ffe50542305e6 /linkify.py
parentede1df71401a16c74dea9c1962bd1085538ac3d7 (diff)
downloadexternal_python_setuptools-caea578cd02a7cb2f7cfa453dfabff66e56aff8d.tar.gz
external_python_setuptools-caea578cd02a7cb2f7cfa453dfabff66e56aff8d.tar.bz2
external_python_setuptools-caea578cd02a7cb2f7cfa453dfabff66e56aff8d.zip
Moved linkify logic to documentation builder as Sphinx extension.
Diffstat (limited to 'linkify.py')
-rw-r--r--linkify.py52
1 files changed, 52 insertions, 0 deletions
diff --git a/linkify.py b/linkify.py
new file mode 100644
index 00000000..1d925aba
--- /dev/null
+++ b/linkify.py
@@ -0,0 +1,52 @@
+"""
+Sphinx plugin to add links to the changelog.
+"""
+
+import re
+import os
+
+
+link_patterns = [
+ r"(Issue )?#(?P<issue>\d+)",
+ r"Pull Request ?#(?P<pull_request>\d+)",
+ r"Distribute #(?P<distribute>\d+)",
+ r"Buildout #(?P<buildout>\d+)",
+ r"Old Setuptools #(?P<old_setuptools>\d+)",
+ r"Jython #(?P<jython>\d+)",
+ r"Python #(?P<python>\d+)",
+]
+
+issue_urls = dict(
+ pull_request='https://bitbucket.org'
+ '/pypa/setuptools/pull-request/{pull_request}',
+ issue='https://bitbucket.org/pypa/setuptools/issue/{issue}',
+ distribute='https://bitbucket.org/tarek/distribute/issue/{distribute}',
+ buildout='https://github.com/buildout/buildout/issues/{buildout}',
+ old_setuptools='http://bugs.python.org/setuptools/issue{old_setuptools}',
+ jython='http://bugs.jython.org/issue{jython}',
+ python='http://bugs.python.org/issue{python}',
+)
+
+
+def _linkify(source, dest):
+ pattern = '|'.join(link_patterns)
+ with open(source) as source:
+ out = re.sub(pattern, replacer, source.read())
+ with open(dest, 'w') as dest:
+ dest.write(out)
+
+
+def replacer(match):
+ text = match.group(0)
+ match_dict = match.groupdict()
+ for key in match_dict:
+ if match_dict[key]:
+ url = issue_urls[key].format(**match_dict)
+ return "`{text} <{url}>`_".format(text=text, url=url)
+
+def setup(app):
+ _linkify('CHANGES.txt', 'CHANGES (links).txt')
+ app.connect('build-finished', remove_file)
+
+def remove_file(app, exception):
+ os.remove('CHANGES (links).txt')