From cbd3eb223d1efa8ed295104a83d41097369a92ba Mon Sep 17 00:00:00 2001 From: Matthias Geier Date: Sun, 11 Dec 2016 11:53:16 +0100 Subject: [PATCH 01/13] LaTeX: Make sure sphinxVerbatim environment is not cut into pieces See https://github.com/spatialaudio/nbsphinx/issues/78 --- sphinx/writers/latex.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/sphinx/writers/latex.py b/sphinx/writers/latex.py index 20a652890..68144f3aa 100644 --- a/sphinx/writers/latex.py +++ b/sphinx/writers/latex.py @@ -2183,10 +2183,11 @@ class LaTeXTranslator(nodes.NodeVisitor): '\\begin{sphinxVerbatim}') # get consistent trailer hlcode = hlcode.rstrip()[:-14] # strip \end{Verbatim} - self.body.append('\n' + hlcode + '\\end{sphinxVerbatim') if self.table and not self.in_footnote: - self.body.append('intable') - self.body.append('}\n') + hlcode += '\\end{sphinxVerbatimintable}' + else: + hlcode += '\\end{sphinxVerbatim}' + self.body.append('\n' + hlcode + '\n') if ids: self.body.append('\\let\\sphinxLiteralBlockLabel\\empty\n') raise nodes.SkipNode From d72954d498a6174e5629e7174f1c639cb76b6fe4 Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Mon, 12 Dec 2016 21:22:16 +0900 Subject: [PATCH 02/13] builtin extensions return metadata to allow parallel build --- sphinx/application.py | 6 ------ sphinx/builders/applehelp.py | 6 ++++++ sphinx/builders/changes.py | 6 ++++++ sphinx/builders/devhelp.py | 6 ++++++ sphinx/builders/dummy.py | 6 ++++++ sphinx/builders/epub.py | 6 ++++++ sphinx/builders/epub3.py | 6 ++++++ sphinx/builders/gettext.py | 6 ++++++ sphinx/builders/html.py | 6 ++++++ sphinx/builders/htmlhelp.py | 6 ++++++ sphinx/builders/latex.py | 6 ++++++ sphinx/builders/linkcheck.py | 6 ++++++ sphinx/builders/manpage.py | 6 ++++++ sphinx/builders/qthelp.py | 6 ++++++ sphinx/builders/texinfo.py | 6 ++++++ sphinx/builders/text.py | 6 ++++++ sphinx/builders/websupport.py | 6 ++++++ sphinx/builders/xml.py | 6 ++++++ sphinx/directives/__init__.py | 6 ++++++ sphinx/directives/code.py | 6 ++++++ sphinx/directives/other.py | 6 ++++++ sphinx/directives/patches.py | 6 ++++++ sphinx/domains/c.py | 6 ++++++ sphinx/domains/cpp.py | 6 ++++++ sphinx/domains/javascript.py | 6 ++++++ sphinx/domains/python.py | 6 ++++++ sphinx/domains/rst.py | 6 ++++++ sphinx/domains/std.py | 6 ++++++ sphinx/roles.py | 6 ++++++ 29 files changed, 168 insertions(+), 6 deletions(-) diff --git a/sphinx/application.py b/sphinx/application.py index 25244ef66..baca1c8f1 100644 --- a/sphinx/application.py +++ b/sphinx/application.py @@ -532,12 +532,6 @@ class Sphinx(object): # special-case for compatibility if extension == 'rst2pdf.pdfbuilder': ext_meta = {'parallel_read_safe': True} - elif extension in builtin_extensions: - ext_meta = { - 'version': 'builtin', - 'parallel_read_safe': True, - 'parallel_write_safe': True, - } try: if not ext_meta.get('version'): ext_meta['version'] = 'unknown version' diff --git a/sphinx/builders/applehelp.py b/sphinx/builders/applehelp.py index d199f33b7..9a0c20ce9 100644 --- a/sphinx/builders/applehelp.py +++ b/sphinx/builders/applehelp.py @@ -293,3 +293,9 @@ def setup(app): app.add_config_value('applehelp_indexer_path', '/usr/bin/hiutil', 'applehelp') app.add_config_value('applehelp_codesign_path', '/usr/bin/codesign', 'applehelp') app.add_config_value('applehelp_disable_external_tools', False, None) + + return { + 'version': 'builtin', + 'parallel_read_safe': True, + 'parallel_write_safe': True, + } diff --git a/sphinx/builders/changes.py b/sphinx/builders/changes.py index 1bccb67d9..a756742c9 100644 --- a/sphinx/builders/changes.py +++ b/sphinx/builders/changes.py @@ -156,3 +156,9 @@ class ChangesBuilder(Builder): def setup(app): app.add_builder(ChangesBuilder) + + return { + 'version': 'builtin', + 'parallel_read_safe': True, + 'parallel_write_safe': True, + } diff --git a/sphinx/builders/devhelp.py b/sphinx/builders/devhelp.py index fd6f3400e..0849a72ea 100644 --- a/sphinx/builders/devhelp.py +++ b/sphinx/builders/devhelp.py @@ -125,3 +125,9 @@ def setup(app): app.add_builder(DevhelpBuilder) app.add_config_value('devhelp_basename', lambda self: make_filename(self.project), None) + + return { + 'version': 'builtin', + 'parallel_read_safe': True, + 'parallel_write_safe': True, + } diff --git a/sphinx/builders/dummy.py b/sphinx/builders/dummy.py index b119d9687..2fb146ecf 100644 --- a/sphinx/builders/dummy.py +++ b/sphinx/builders/dummy.py @@ -38,3 +38,9 @@ class DummyBuilder(Builder): def setup(app): app.add_builder(DummyBuilder) + + return { + 'version': 'builtin', + 'parallel_read_safe': True, + 'parallel_write_safe': True, + } diff --git a/sphinx/builders/epub.py b/sphinx/builders/epub.py index eee138453..c22f5ff76 100644 --- a/sphinx/builders/epub.py +++ b/sphinx/builders/epub.py @@ -829,3 +829,9 @@ def setup(app): app.add_config_value('epub_max_image_width', 0, 'env') app.add_config_value('epub_show_urls', 'inline', 'html') app.add_config_value('epub_use_index', lambda self: self.html_use_index, 'html') + + return { + 'version': 'builtin', + 'parallel_read_safe': True, + 'parallel_write_safe': True, + } diff --git a/sphinx/builders/epub3.py b/sphinx/builders/epub3.py index ae799986e..5e0663a08 100644 --- a/sphinx/builders/epub3.py +++ b/sphinx/builders/epub3.py @@ -281,3 +281,9 @@ def setup(app): app.add_config_value('epub3_description', None, 'epub3', string_classes) app.add_config_value('epub3_contributor', None, 'epub3', string_classes) app.add_config_value('epub3_page_progression_direction', None, 'epub3', string_classes) + + return { + 'version': 'builtin', + 'parallel_read_safe': True, + 'parallel_write_safe': True, + } diff --git a/sphinx/builders/gettext.py b/sphinx/builders/gettext.py index e118cde99..ca51f90d0 100644 --- a/sphinx/builders/gettext.py +++ b/sphinx/builders/gettext.py @@ -256,3 +256,9 @@ def setup(app): app.add_config_value('gettext_uuid', False, 'gettext') app.add_config_value('gettext_auto_build', True, 'env') app.add_config_value('gettext_additional_targets', [], 'env') + + return { + 'version': 'builtin', + 'parallel_read_safe': True, + 'parallel_write_safe': True, + } diff --git a/sphinx/builders/html.py b/sphinx/builders/html.py index 4fbbff153..9160080c8 100644 --- a/sphinx/builders/html.py +++ b/sphinx/builders/html.py @@ -1254,3 +1254,9 @@ def setup(app): app.add_config_value('html_search_options', {}, 'html') app.add_config_value('html_search_scorer', '', None) app.add_config_value('html_scaled_image_link', True, 'html') + + return { + 'version': 'builtin', + 'parallel_read_safe': True, + 'parallel_write_safe': True, + } diff --git a/sphinx/builders/htmlhelp.py b/sphinx/builders/htmlhelp.py index ecc752b60..79268ab74 100644 --- a/sphinx/builders/htmlhelp.py +++ b/sphinx/builders/htmlhelp.py @@ -312,3 +312,9 @@ def setup(app): app.add_builder(HTMLHelpBuilder) app.add_config_value('htmlhelp_basename', lambda self: make_filename(self.project), None) + + return { + 'version': 'builtin', + 'parallel_read_safe': True, + 'parallel_write_safe': True, + } diff --git a/sphinx/builders/latex.py b/sphinx/builders/latex.py index f4c9cf608..7bd43a84c 100644 --- a/sphinx/builders/latex.py +++ b/sphinx/builders/latex.py @@ -304,3 +304,9 @@ def setup(app): None) # now deprecated - use latex_elements app.add_config_value('latex_preamble', '', None) + + return { + 'version': 'builtin', + 'parallel_read_safe': True, + 'parallel_write_safe': True, + } diff --git a/sphinx/builders/linkcheck.py b/sphinx/builders/linkcheck.py index 5a1943f48..3ca13d023 100644 --- a/sphinx/builders/linkcheck.py +++ b/sphinx/builders/linkcheck.py @@ -299,3 +299,9 @@ def setup(app): # Anchors starting with ! are ignored since they are # commonly used for dynamic pages app.add_config_value('linkcheck_anchors_ignore', ["^!"], None) + + return { + 'version': 'builtin', + 'parallel_read_safe': True, + 'parallel_write_safe': True, + } diff --git a/sphinx/builders/manpage.py b/sphinx/builders/manpage.py index 248ed40b2..7b2fcf1d8 100644 --- a/sphinx/builders/manpage.py +++ b/sphinx/builders/manpage.py @@ -99,3 +99,9 @@ def setup(app): '%s %s' % (self.project, self.release), [], 1)], None) app.add_config_value('man_show_urls', False, None) + + return { + 'version': 'builtin', + 'parallel_read_safe': True, + 'parallel_write_safe': True, + } diff --git a/sphinx/builders/qthelp.py b/sphinx/builders/qthelp.py index c53b56657..23bc24ce8 100644 --- a/sphinx/builders/qthelp.py +++ b/sphinx/builders/qthelp.py @@ -310,3 +310,9 @@ def setup(app): app.add_config_value('qthelp_basename', lambda self: make_filename(self.project), None) app.add_config_value('qthelp_theme', 'nonav', 'html') app.add_config_value('qthelp_theme_options', {}, 'html') + + return { + 'version': 'builtin', + 'parallel_read_safe': True, + 'parallel_write_safe': True, + } diff --git a/sphinx/builders/texinfo.py b/sphinx/builders/texinfo.py index f070840b6..cdba3df55 100644 --- a/sphinx/builders/texinfo.py +++ b/sphinx/builders/texinfo.py @@ -242,3 +242,9 @@ def setup(app): app.add_config_value('texinfo_domain_indices', True, None, [list]) app.add_config_value('texinfo_show_urls', 'footnote', None) app.add_config_value('texinfo_no_detailmenu', False, None) + + return { + 'version': 'builtin', + 'parallel_read_safe': True, + 'parallel_write_safe': True, + } diff --git a/sphinx/builders/text.py b/sphinx/builders/text.py index 2daf8b043..25a0af6a0 100644 --- a/sphinx/builders/text.py +++ b/sphinx/builders/text.py @@ -74,3 +74,9 @@ def setup(app): app.add_config_value('text_sectionchars', '*=-~"+`', 'env') app.add_config_value('text_newlines', 'unix', 'env') + + return { + 'version': 'builtin', + 'parallel_read_safe': True, + 'parallel_write_safe': True, + } diff --git a/sphinx/builders/websupport.py b/sphinx/builders/websupport.py index d8ff5ad8d..1154b3419 100644 --- a/sphinx/builders/websupport.py +++ b/sphinx/builders/websupport.py @@ -169,3 +169,9 @@ class WebSupportBuilder(PickleHTMLBuilder): def setup(app): app.add_builder(WebSupportBuilder) + + return { + 'version': 'builtin', + 'parallel_read_safe': True, + 'parallel_write_safe': True, + } diff --git a/sphinx/builders/xml.py b/sphinx/builders/xml.py index e0e33312c..73d9e72be 100644 --- a/sphinx/builders/xml.py +++ b/sphinx/builders/xml.py @@ -102,3 +102,9 @@ def setup(app): app.add_builder(PseudoXMLBuilder) app.add_config_value('xml_pretty', True, 'env') + + return { + 'version': 'builtin', + 'parallel_read_safe': True, + 'parallel_write_safe': True, + } diff --git a/sphinx/directives/__init__.py b/sphinx/directives/__init__.py index 76b54f9d6..9d4c6eba8 100644 --- a/sphinx/directives/__init__.py +++ b/sphinx/directives/__init__.py @@ -230,3 +230,9 @@ def setup(app): directives.register_directive('describe', ObjectDescription) # new, more consistent, name directives.register_directive('object', ObjectDescription) + + return { + 'version': 'builtin', + 'parallel_read_safe': True, + 'parallel_write_safe': True, + } diff --git a/sphinx/directives/code.py b/sphinx/directives/code.py index 5bef8c386..519a32577 100644 --- a/sphinx/directives/code.py +++ b/sphinx/directives/code.py @@ -383,3 +383,9 @@ def setup(app): directives.register_directive('code-block', CodeBlock) directives.register_directive('sourcecode', CodeBlock) directives.register_directive('literalinclude', LiteralInclude) + + return { + 'version': 'builtin', + 'parallel_read_safe': True, + 'parallel_write_safe': True, + } diff --git a/sphinx/directives/other.py b/sphinx/directives/other.py index e071b327e..b6d9f8129 100644 --- a/sphinx/directives/other.py +++ b/sphinx/directives/other.py @@ -431,3 +431,9 @@ def setup(app): directives.register_directive('cssclass', Class) # new standard name when default-domain with "class" is in effect directives.register_directive('rst-class', Class) + + return { + 'version': 'builtin', + 'parallel_read_safe': True, + 'parallel_write_safe': True, + } diff --git a/sphinx/directives/patches.py b/sphinx/directives/patches.py index 041bee360..8b14ba2b0 100644 --- a/sphinx/directives/patches.py +++ b/sphinx/directives/patches.py @@ -58,3 +58,9 @@ class Meta(html.Meta): def setup(app): directives.register_directive('figure', Figure) directives.register_directive('meta', Meta) + + return { + 'version': 'builtin', + 'parallel_read_safe': True, + 'parallel_write_safe': True, + } diff --git a/sphinx/domains/c.py b/sphinx/domains/c.py index 43e869dbc..a50af9ae6 100644 --- a/sphinx/domains/c.py +++ b/sphinx/domains/c.py @@ -306,3 +306,9 @@ class CDomain(Domain): def setup(app): app.add_domain(CDomain) + + return { + 'version': 'builtin', + 'parallel_read_safe': True, + 'parallel_write_safe': True, + } diff --git a/sphinx/domains/cpp.py b/sphinx/domains/cpp.py index 6c12d6aca..98e584546 100644 --- a/sphinx/domains/cpp.py +++ b/sphinx/domains/cpp.py @@ -4592,3 +4592,9 @@ def setup(app): app.add_config_value("cpp_index_common_prefix", [], 'env') app.add_config_value("cpp_id_attributes", [], 'env') app.add_config_value("cpp_paren_attributes", [], 'env') + + return { + 'version': 'builtin', + 'parallel_read_safe': True, + 'parallel_write_safe': True, + } diff --git a/sphinx/domains/javascript.py b/sphinx/domains/javascript.py index ade6e4224..f0b78589e 100644 --- a/sphinx/domains/javascript.py +++ b/sphinx/domains/javascript.py @@ -238,3 +238,9 @@ class JavaScriptDomain(Domain): def setup(app): app.add_domain(JavaScriptDomain) + + return { + 'version': 'builtin', + 'parallel_read_safe': True, + 'parallel_write_safe': True, + } diff --git a/sphinx/domains/python.py b/sphinx/domains/python.py index d37e55fa3..a7e2bb8f6 100644 --- a/sphinx/domains/python.py +++ b/sphinx/domains/python.py @@ -800,3 +800,9 @@ class PythonDomain(Domain): def setup(app): app.add_domain(PythonDomain) + + return { + 'version': 'builtin', + 'parallel_read_safe': True, + 'parallel_write_safe': True, + } diff --git a/sphinx/domains/rst.py b/sphinx/domains/rst.py index 526ae18a7..d5c4427de 100644 --- a/sphinx/domains/rst.py +++ b/sphinx/domains/rst.py @@ -160,3 +160,9 @@ class ReSTDomain(Domain): def setup(app): app.add_domain(ReSTDomain) + + return { + 'version': 'builtin', + 'parallel_read_safe': True, + 'parallel_write_safe': True, + } diff --git a/sphinx/domains/std.py b/sphinx/domains/std.py index 7210b75af..021d26a46 100644 --- a/sphinx/domains/std.py +++ b/sphinx/domains/std.py @@ -862,3 +862,9 @@ class StandardDomain(Domain): def setup(app): app.add_domain(StandardDomain) + + return { + 'version': 'builtin', + 'parallel_read_safe': True, + 'parallel_write_safe': True, + } diff --git a/sphinx/roles.py b/sphinx/roles.py index 6e8de3b4a..71bc83b2d 100644 --- a/sphinx/roles.py +++ b/sphinx/roles.py @@ -349,3 +349,9 @@ def setup(app): for rolename, func in iteritems(specific_docroles): roles.register_local_role(rolename, func) + + return { + 'version': 'builtin', + 'parallel_read_safe': True, + 'parallel_write_safe': True, + } From 5fc8d3db9160cf9dcbb5ed1034aec9302dbac0dd Mon Sep 17 00:00:00 2001 From: shimizukawa Date: Mon, 12 Dec 2016 23:24:22 +0900 Subject: [PATCH 03/13] Fix: #2469: Ignore updates of catalog files for gettext builder. Thanks to Hiroshi Ohkubo. --- CHANGES | 2 ++ sphinx/application.py | 2 +- sphinx/environment/__init__.py | 31 +++++++++++++++++++------------ tests/test_intl.py | 9 +++++++++ 4 files changed, 31 insertions(+), 13 deletions(-) diff --git a/CHANGES b/CHANGES index 9481299cb..8e73f560a 100644 --- a/CHANGES +++ b/CHANGES @@ -21,6 +21,8 @@ Bugs fixed * #3220: KeyError when having a duplicate citation * #3200: LaTeX: xref inside desc_name not allowed * #3228: ``build_sphinx`` command crashes when missing dependency +* #2469: Ignore updates of catalog files for gettext builder. Thanks to + Hiroshi Ohkubo. Release 1.5 (released Dec 5, 2016) diff --git a/sphinx/application.py b/sphinx/application.py index baca1c8f1..00661aa61 100644 --- a/sphinx/application.py +++ b/sphinx/application.py @@ -281,7 +281,7 @@ class Sphinx(object): if freshenv: self.env = BuildEnvironment(self.srcdir, self.doctreedir, self.config) self.env.set_warnfunc(self.warn) - self.env.find_files(self.config) + self.env.find_files(self.config, self.buildername) for domain in self.domains.keys(): self.env.domains[domain] = self.domains[domain](self.env) else: diff --git a/sphinx/environment/__init__.py b/sphinx/environment/__init__.py index f5cd1550b..0f978e42e 100644 --- a/sphinx/environment/__init__.py +++ b/sphinx/environment/__init__.py @@ -379,7 +379,7 @@ class BuildEnvironment(object): enc_rel_fn = rel_fn.encode(sys.getfilesystemencoding()) return rel_fn, path.abspath(path.join(self.srcdir, enc_rel_fn)) - def find_files(self, config): + def find_files(self, config, buildername=None): """Find all source files in the source dir and put them in self.found_docs. """ @@ -397,16 +397,23 @@ class BuildEnvironment(object): else: self.warn(docname, "document not readable. Ignored.") - # add catalog mo file dependency - for docname in self.found_docs: - catalog_files = find_catalog_files( - docname, - self.srcdir, - self.config.locale_dirs, - self.config.language, - self.config.gettext_compact) - for filename in catalog_files: - self.dependencies.setdefault(docname, set()).add(filename) + # Current implementation is applying translated messages in the reading + # phase.Therefore, in order to apply the updated message catalog, it is + # necessary to re-process from the reading phase. Here, if dependency + # is set for the doc source and the mo file, it is processed again from + # the reading phase when mo is updated. In the future, we would like to + # move i18n process into the writing phase, and remove these lines. + if buildername != 'gettext': + # add catalog mo file dependency + for docname in self.found_docs: + catalog_files = find_catalog_files( + docname, + self.srcdir, + self.config.locale_dirs, + self.config.language, + self.config.gettext_compact) + for filename in catalog_files: + self.dependencies.setdefault(docname, set()).add(filename) def get_outdated_files(self, config_changed): """Return (added, changed, removed) sets.""" @@ -488,7 +495,7 @@ class BuildEnvironment(object): # the source and doctree directories may have been relocated self.srcdir = srcdir self.doctreedir = doctreedir - self.find_files(config) + self.find_files(config, app.buildername) self.config = config # this cache also needs to be updated every time diff --git a/tests/test_intl.py b/tests/test_intl.py index 68fae6b15..4a517c111 100644 --- a/tests/test_intl.py +++ b/tests/test_intl.py @@ -367,6 +367,15 @@ def test_gettext_builder(app, status, warning): for expect_msg in [m for m in expect if m.id]: yield assert_in, expect_msg.id, [m.id for m in actual if m.id] + # --- don't rebuild by .mo mtime + app.builder.build_update() + updated = app.env.update(app.config, app.srcdir, app.doctreedir, app) + yield assert_equal, len(updated), 0 + + (app.srcdir / 'xx' / 'LC_MESSAGES' / 'bom.mo').utime(None) + updated = app.env.update(app.config, app.srcdir, app.doctreedir, app) + yield assert_equal, len(updated), 0 + @gen_with_intl_app('html', freshenv=True) def test_html_builder(app, status, warning): From 4054b0b3a554a0a08a39f5a6152a97c31f8ed13b Mon Sep 17 00:00:00 2001 From: shimizukawa Date: Tue, 13 Dec 2016 00:47:18 +0900 Subject: [PATCH 04/13] Fix #3183: Randomized jump box order in generated index page. --- CHANGES | 2 +- sphinx/environment/managers/indexentries.py | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index 8e73f560a..750dda19f 100644 --- a/CHANGES +++ b/CHANGES @@ -23,7 +23,7 @@ Bugs fixed * #3228: ``build_sphinx`` command crashes when missing dependency * #2469: Ignore updates of catalog files for gettext builder. Thanks to Hiroshi Ohkubo. - +* #3183: Randomized jump box order in generated index page. Release 1.5 (released Dec 5, 2016) ================================== diff --git a/sphinx/environment/managers/indexentries.py b/sphinx/environment/managers/indexentries.py index c35a161b4..d4e5f05bd 100644 --- a/sphinx/environment/managers/indexentries.py +++ b/sphinx/environment/managers/indexentries.py @@ -115,7 +115,11 @@ class IndexEntries(EnvironmentManager): # sort the index entries; put all symbols at the front, even those # following the letters in ASCII, this is where the chr(127) comes from def keyfunc(entry, lcletters=string.ascii_lowercase + '_'): - lckey = unicodedata.normalize('NFD', entry[0].lower()) + key, (void, void, category_key) = entry + if category_key: + # using specified category key to sort + key = category_key + lckey = unicodedata.normalize('NFD', key.lower()) if lckey[0:1] in lcletters: lckey = chr(127) + lckey # ensure a determinstic order *within* letters by also sorting on From b98e2e39bb71795d1edc4c0696c3606a57d936ff Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Tue, 13 Dec 2016 11:38:23 +0900 Subject: [PATCH 05/13] Refactor depart_image() --- sphinx/writers/html.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/sphinx/writers/html.py b/sphinx/writers/html.py index 76ad8dea1..6c685e7ca 100644 --- a/sphinx/writers/html.py +++ b/sphinx/writers/html.py @@ -535,13 +535,10 @@ class HTMLTranslator(BaseTranslator): # overwritten def depart_image(self, node): - if sphinx.util.docutils.__version_info__ >= (0, 13): - # since docutils-0.13, HTMLWriter does not push context data on visit_image() - if node['uri'].lower().endswith(('svg', 'svgz')): - self.body.append(self.context.pop()) - else: - # docutils-0.12 or below, HTML Writer always push context data on visit_image() + if node['uri'].lower().endswith(('svg', 'svgz')): self.body.append(self.context.pop()) + else: + BaseTranslator.depart_image(self, node) def visit_toctree(self, node): # this only happens when formatting a toc from env.tocs -- in this From 7dabcdee91f1d0d9420f4926ad12a95c3aa4422f Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Tue, 13 Dec 2016 12:15:30 +0900 Subject: [PATCH 06/13] Fix flake8 violation --- sphinx/writers/html.py | 1 - 1 file changed, 1 deletion(-) diff --git a/sphinx/writers/html.py b/sphinx/writers/html.py index 6c685e7ca..ebffa2f28 100644 --- a/sphinx/writers/html.py +++ b/sphinx/writers/html.py @@ -22,7 +22,6 @@ from docutils.writers.html4css1 import Writer, HTMLTranslator as BaseTranslator from sphinx import addnodes from sphinx.deprecation import RemovedInSphinx16Warning from sphinx.locale import admonitionlabels, _ -import sphinx.util.docutils from sphinx.util.images import get_image_size from sphinx.util.smartypants import sphinx_smarty_pants From 2390c5549c24d4d97f033bf4969e526d2cdfaf06 Mon Sep 17 00:00:00 2001 From: Luc Saffre Date: Tue, 13 Dec 2016 11:19:22 +0200 Subject: [PATCH 07/13] fix #2336 autosummary imported members --- sphinx/ext/autosummary/generate.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/sphinx/ext/autosummary/generate.py b/sphinx/ext/autosummary/generate.py index 3e81a14a2..a47a1105f 100644 --- a/sphinx/ext/autosummary/generate.py +++ b/sphinx/ext/autosummary/generate.py @@ -165,17 +165,19 @@ def generate_autosummary_docs(sources, output_dir=None, suffix='.rst', except TemplateNotFound: template = template_env.get_template('autosummary/base.rst') - def get_members(obj, typ, include_public=[]): + def get_members(obj, typ, include_public=[], imported=False): # type: (Any, unicode, List[unicode]) -> Tuple[List[unicode], List[unicode]] items = [] # type: List[unicode] for name in dir(obj): try: - documenter = get_documenter(safe_getattr(obj, name), - obj) + value = safe_getattr(obj, name) except AttributeError: continue + documenter = get_documenter(value, obj) if documenter.objtype == typ: - items.append(name) + if imported or getattr(value, '__module__', None) == obj.__name__: + + items.append(name) public = [x for x in items if x in include_public or not x.startswith('_')] return public, items From 3a60eb984b3410a462a3d880ae96017d881bb416 Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Tue, 13 Dec 2016 23:59:01 +0900 Subject: [PATCH 08/13] Remove .mypy_cache on `make clean` --- Makefile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 01e3a7837..652ade4f4 100644 --- a/Makefile +++ b/Makefile @@ -35,7 +35,7 @@ all: clean-pyc clean-backupfiles style-check test style-check: @$(PYTHON) utils/check_sources.py $(DONT_CHECK) . -clean: clean-pyc clean-pycache clean-patchfiles clean-backupfiles clean-generated clean-testfiles clean-buildfiles +clean: clean-pyc clean-pycache clean-patchfiles clean-backupfiles clean-generated clean-testfiles clean-buildfiles clean-mypyfiles clean-pyc: find . -name '*.pyc' -exec rm -f {} + @@ -62,6 +62,9 @@ clean-testfiles: clean-buildfiles: rm -rf build +clean-mypyfiles: + rm -rf .mypy_cache/ + pylint: @pylint --rcfile utils/pylintrc sphinx From 794f6bdca4aaf81f8162e9469d6d74343cee0c31 Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Wed, 14 Dec 2016 00:01:49 +0900 Subject: [PATCH 09/13] Bump to 1.5.1 final --- CHANGES | 4 ++-- sphinx/__init__.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/CHANGES b/CHANGES index 750dda19f..54a8ae08a 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,5 @@ -Release 1.5.1 (in development) -============================== +Release 1.5.1 (released Dec 13, 2016) +===================================== Features added -------------- diff --git a/sphinx/__init__.py b/sphinx/__init__.py index 29a1bf35d..75c8a53fa 100644 --- a/sphinx/__init__.py +++ b/sphinx/__init__.py @@ -30,13 +30,13 @@ if 'PYTHONWARNINGS' not in os.environ: warnings.filterwarnings('ignore', "'U' mode is deprecated", DeprecationWarning, module='docutils.io') -__version__ = '1.5+' -__released__ = '1.5' # used when Sphinx builds its own docs +__version__ = '1.5.1' +__released__ = '1.5.1' # used when Sphinx builds its own docs # version info for better programmatic use # possible values for 3rd element: 'alpha', 'beta', 'rc', 'final' # 'final' has 0 as the last element -version_info = (1, 5, 1, 'beta', 1) +version_info = (1, 5, 1, 'final', 0) package_dir = path.abspath(path.dirname(__file__)) From 6bb903058052390be5eedeb4941c4e31c3c75465 Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Wed, 14 Dec 2016 00:08:56 +0900 Subject: [PATCH 10/13] Bump version --- CHANGES | 9 +++++++++ sphinx/__init__.py | 6 +++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/CHANGES b/CHANGES index 54a8ae08a..d21e1e83a 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,12 @@ +Release 1.5.2 (in development) +=============================== + +Features added +-------------- + +Bugs fixed +---------- + Release 1.5.1 (released Dec 13, 2016) ===================================== diff --git a/sphinx/__init__.py b/sphinx/__init__.py index 75c8a53fa..e5768dcbe 100644 --- a/sphinx/__init__.py +++ b/sphinx/__init__.py @@ -30,13 +30,13 @@ if 'PYTHONWARNINGS' not in os.environ: warnings.filterwarnings('ignore', "'U' mode is deprecated", DeprecationWarning, module='docutils.io') -__version__ = '1.5.1' -__released__ = '1.5.1' # used when Sphinx builds its own docs +__version__ = '1.5.2+' +__released__ = '1.5.2' # used when Sphinx builds its own docs # version info for better programmatic use # possible values for 3rd element: 'alpha', 'beta', 'rc', 'final' # 'final' has 0 as the last element -version_info = (1, 5, 1, 'final', 0) +version_info = (1, 5, 2, 'beta', 1) package_dir = path.abspath(path.dirname(__file__)) From 3f0db5469e2d468fefa9ef7bdca8a295db2e538e Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Wed, 14 Dec 2016 00:37:16 +0900 Subject: [PATCH 11/13] Fix miss-merging --- sphinx/environment/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sphinx/environment/__init__.py b/sphinx/environment/__init__.py index 4473b801d..ecd8230d2 100644 --- a/sphinx/environment/__init__.py +++ b/sphinx/environment/__init__.py @@ -427,7 +427,7 @@ class BuildEnvironment(object): enc_rel_fn = rel_fn.encode(sys.getfilesystemencoding()) return rel_fn, path.abspath(path.join(self.srcdir, enc_rel_fn)) - def find_files(self, config): + def find_files(self, config, buildername): # type: (Config, unicode) -> None """Find all source files in the source dir and put them in self.found_docs. From 938d44e2ded54e23da677a120381228bca4c6a5f Mon Sep 17 00:00:00 2001 From: shimizukawa Date: Wed, 14 Dec 2016 00:51:12 +0900 Subject: [PATCH 12/13] Fix #1061, #2336, #3235: Now generation of autosummary doesn't contain imported members by default. Thanks to Luc Saffre. --- CHANGES | 3 +++ sphinx/ext/autosummary/generate.py | 1 - 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index dc7a6e2ef..415561fc3 100644 --- a/CHANGES +++ b/CHANGES @@ -4,6 +4,9 @@ Release 1.6 (in development) Incompatible changes -------------------- +* #1061, #2336, #3235: Now generation of autosummary doesn't contain imported + members by default. Thanks to Luc Saffre. + Features added -------------- diff --git a/sphinx/ext/autosummary/generate.py b/sphinx/ext/autosummary/generate.py index a47a1105f..d3dfbe5e1 100644 --- a/sphinx/ext/autosummary/generate.py +++ b/sphinx/ext/autosummary/generate.py @@ -176,7 +176,6 @@ def generate_autosummary_docs(sources, output_dir=None, suffix='.rst', documenter = get_documenter(value, obj) if documenter.objtype == typ: if imported or getattr(value, '__module__', None) == obj.__name__: - items.append(name) public = [x for x in items if x in include_public or not x.startswith('_')] From c016c6461635edd8883629362a3b466938ed8291 Mon Sep 17 00:00:00 2001 From: shimizukawa Date: Wed, 14 Dec 2016 01:03:34 +0900 Subject: [PATCH 13/13] refs #3222 add issue template --- .github/ISSUE_TEMPLATE.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE.md diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 000000000..5caf7d6a4 --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,27 @@ +Subject: + +# Problem +- + +## Procedure to reproduce the problem +``` + +``` + +## Error logs / results +``` + +``` +- + +## Expected results + + +# Reproducible project / your project +- + +# Environment info +- OS: +- Python version: +- Sphinx version: +-