diff options
author | Georg Brandl <georg@python.org> | 2014-09-22 22:05:03 +0200 |
---|---|---|
committer | Georg Brandl <georg@python.org> | 2014-09-22 22:05:03 +0200 |
commit | f5ca17f03123f467f929199403890e40226ed79f (patch) | |
tree | 7f5cf917c6fba41a40979b76d018b9900cd0679a | |
parent | 81b87b9d7fcb49c52e82bc41b831da924370fe4f (diff) | |
download | sphinx-f5ca17f03123f467f929199403890e40226ed79f.tar.gz |
Make remaining builtin extensions parallel-read-proof.
-rw-r--r-- | doc/extdev/appapi.rst | 4 | ||||
-rw-r--r-- | sphinx/builders/__init__.py | 3 | ||||
-rw-r--r-- | sphinx/builders/html.py | 4 | ||||
-rw-r--r-- | sphinx/ext/autosummary/__init__.py | 2 | ||||
-rw-r--r-- | sphinx/ext/linkcode.py | 2 | ||||
-rw-r--r-- | sphinx/ext/todo.py | 11 | ||||
-rw-r--r-- | sphinx/ext/viewcode.py | 37 |
7 files changed, 43 insertions, 20 deletions
diff --git a/doc/extdev/appapi.rst b/doc/extdev/appapi.rst index d5d1c033..4fed158c 100644 --- a/doc/extdev/appapi.rst +++ b/doc/extdev/appapi.rst @@ -507,7 +507,9 @@ handlers to the events. Example: that have been read in the subprocess. For a sample of how to deal with this event, look at the standard - ``sphinx.ext.viewcode`` extension. + ``sphinx.ext.todo`` extension. The implementation is often similar to that + of :event:`env-purge-doc`, only that information is not removed, but added to + the main environment from the other environment. .. versionadded:: 1.3 diff --git a/sphinx/builders/__init__.py b/sphinx/builders/__init__.py index a8ca2bc8..d52a7983 100644 --- a/sphinx/builders/__init__.py +++ b/sphinx/builders/__init__.py @@ -153,8 +153,7 @@ class Builder(object): def compile_catalogs(self, catalogs, message): if not self.config.gettext_auto_build: return - self.info(bold('building [mo]: '), nonl=1) - self.info(message) + self.info(bold('building [mo]: ') + message) for catalog in self.app.status_iterator( catalogs, 'writing output... ', darkgreen, len(catalogs), lambda c: c.mo_path): diff --git a/sphinx/builders/html.py b/sphinx/builders/html.py index 164d81b2..c2c30893 100644 --- a/sphinx/builders/html.py +++ b/sphinx/builders/html.py @@ -467,13 +467,13 @@ class StandaloneHTMLBuilder(Builder): self.info() def gen_additional_pages(self): - self.info(bold('writing additional pages...'), nonl=1) - # pages from extensions for pagelist in self.app.emit('html-collect-pages'): for pagename, context, template in pagelist: self.handle_page(pagename, context, template) + self.info(bold('writing additional pages...'), nonl=1) + # additional pages from conf.py for pagename, template in self.config.html_additional_pages.items(): self.info(' '+pagename, nonl=1) diff --git a/sphinx/ext/autosummary/__init__.py b/sphinx/ext/autosummary/__init__.py index c37aa1f3..c40ba91d 100644 --- a/sphinx/ext/autosummary/__init__.py +++ b/sphinx/ext/autosummary/__init__.py @@ -570,4 +570,4 @@ def setup(app): app.connect('doctree-read', process_autosummary_toc) app.connect('builder-inited', process_generate_options) app.add_config_value('autosummary_generate', [], True) - return {'version': sphinx.__version__, 'parallel_read_safe': False} + return {'version': sphinx.__version__, 'parallel_read_safe': True} diff --git a/sphinx/ext/linkcode.py b/sphinx/ext/linkcode.py index b11fff09..37e021e8 100644 --- a/sphinx/ext/linkcode.py +++ b/sphinx/ext/linkcode.py @@ -74,4 +74,4 @@ def doctree_read(app, doctree): def setup(app): app.connect('doctree-read', doctree_read) app.add_config_value('linkcode_resolve', None, '') - return {'version': sphinx.__version__, 'parallel_read_safe': False} + return {'version': sphinx.__version__, 'parallel_read_safe': True} diff --git a/sphinx/ext/todo.py b/sphinx/ext/todo.py index f40ed893..ae434dd4 100644 --- a/sphinx/ext/todo.py +++ b/sphinx/ext/todo.py @@ -150,6 +150,14 @@ def purge_todos(app, env, docname): if todo['docname'] != docname] +def merge_info(app, env, docnames, other): + if not hasattr(other, 'todo_all_todos'): + return + if not hasattr(env, 'todo_all_todos'): + env.todo_all_todos = [] + env.todo_all_todos.extend(other.todo_all_todos) + + def visit_todo_node(self, node): self.visit_admonition(node) @@ -172,4 +180,5 @@ def setup(app): app.connect('doctree-read', process_todos) app.connect('doctree-resolved', process_todo_nodes) app.connect('env-purge-doc', purge_todos) - return {'version': sphinx.__version__, 'parallel_read_safe': False} + app.connect('env-merge-info', merge_info) + return {'version': sphinx.__version__, 'parallel_read_safe': True} diff --git a/sphinx/ext/viewcode.py b/sphinx/ext/viewcode.py index 9cccff6f..cd3f2ac7 100644 --- a/sphinx/ext/viewcode.py +++ b/sphinx/ext/viewcode.py @@ -20,6 +20,7 @@ from sphinx.locale import _ from sphinx.pycode import ModuleAnalyzer from sphinx.util import get_full_modname from sphinx.util.nodes import make_refnode +from sphinx.util.console import blue def _get_full_modname(app, modname, attribute): @@ -37,7 +38,7 @@ def _get_full_modname(app, modname, attribute): # It should be displayed only verbose mode. app.verbose(traceback.format_exc().rstrip()) app.verbose('viewcode can\'t import %s, failed with error "%s"' % - (modname, e)) + (modname, e)) return None @@ -100,6 +101,16 @@ def doctree_read(app, doctree): signode += onlynode +def env_merge_info(app, env, docnames, other): + if not hasattr(other, '_viewcode_modules'): + return + # create a _viewcode_modules dict on the main environment + if not hasattr(env, '_viewcode_modules'): + env._viewcode_modules = {} + # now merge in the information from the subprocess + env._viewcode_modules.update(other._viewcode_modules) + + def missing_reference(app, env, node, contnode): # resolve our "viewcode" reference nodes -- they need special treatment if node['reftype'] == 'viewcode': @@ -116,10 +127,12 @@ def collect_pages(app): modnames = set(env._viewcode_modules) - app.builder.info(' (%d module code pages)' % - len(env._viewcode_modules), nonl=1) +# app.builder.info(' (%d module code pages)' % +# len(env._viewcode_modules), nonl=1) - for modname, entry in iteritems(env._viewcode_modules): + for modname, entry in app.status_iterator( + iteritems(env._viewcode_modules), 'highlighting module code... ', + blue, len(env._viewcode_modules), lambda x: x[0]): if not entry: continue code, tags, used, refname = entry @@ -162,15 +175,14 @@ def collect_pages(app): context = { 'parents': parents, 'title': modname, - 'body': _('<h1>Source code for %s</h1>') % modname + \ - '\n'.join(lines) + 'body': (_('<h1>Source code for %s</h1>') % modname + + '\n'.join(lines)), } yield (pagename, context, 'page.html') if not modnames: return - app.builder.info(' _modules/index', nonl=True) html = ['\n'] # the stack logic is needed for using nested lists for submodules stack = [''] @@ -190,8 +202,8 @@ def collect_pages(app): html.append('</ul>' * (len(stack) - 1)) context = { 'title': _('Overview: module code'), - 'body': _('<h1>All modules for which code is available</h1>') + \ - ''.join(html), + 'body': (_('<h1>All modules for which code is available</h1>') + + ''.join(html)), } yield ('_modules/index', context, 'page.html') @@ -200,8 +212,9 @@ def collect_pages(app): def setup(app): app.add_config_value('viewcode_import', True, False) app.connect('doctree-read', doctree_read) + app.connect('env-merge-info', env_merge_info) app.connect('html-collect-pages', collect_pages) app.connect('missing-reference', missing_reference) - #app.add_config_value('viewcode_include_modules', [], 'env') - #app.add_config_value('viewcode_exclude_modules', [], 'env') - return {'version': sphinx.__version__, 'parallel_read_safe': False} + # app.add_config_value('viewcode_include_modules', [], 'env') + # app.add_config_value('viewcode_exclude_modules', [], 'env') + return {'version': sphinx.__version__, 'parallel_read_safe': True} |