From 3d67be3dcee3144edccf5d054e660a994f48bac9 Mon Sep 17 00:00:00 2001 From: Takayuki Shimizukawa Date: Fri, 27 Dec 2013 05:23:47 +0000 Subject: [PATCH] Fix autosummary template overloading cause infinite recursive function call. Closes #1335 --- CHANGES | 13 +++++-- sphinx/jinja2glue.py | 6 ++-- .../_templates/autosummary/class.rst | 8 +++++ .../test-templating/_templates/layout.html | 6 ++++ .../autosummary_templating.txt | 13 +++++++ tests/roots/test-templating/conf.py | 11 ++++++ tests/roots/test-templating/contents.txt | 7 ++++ tests/test_templating.py | 36 +++++++++++++++++++ 8 files changed, 96 insertions(+), 4 deletions(-) create mode 100644 tests/roots/test-templating/_templates/autosummary/class.rst create mode 100644 tests/roots/test-templating/_templates/layout.html create mode 100644 tests/roots/test-templating/autosummary_templating.txt create mode 100644 tests/roots/test-templating/conf.py create mode 100644 tests/roots/test-templating/contents.txt create mode 100644 tests/test_templating.py diff --git a/CHANGES b/CHANGES index a113c33a1..8d75fe261 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,13 @@ Release 1.2.1 (in development) ============================== +Bugs fixed +---------- + +* #1335: Fix autosummary template overloading like + ``{% extends "!autosummary/class.rst" %}`` cause infinite recursive function + call. This caused by PR#181. + Release 1.2 (released Dec 10, 2013) =================================== @@ -22,8 +29,10 @@ Bugs fixed * Restore ``versionmodified`` CSS class for versionadded/changed and deprecated directives. -* Fix: `html_theme_path=['.']` is a trigger of rebuild all documents always - (This change keeps the current "theme changes cause a rebuild" feature). + +* PR#181: Fix `html_theme_path=['.']` is a trigger of rebuild all documents + always (This change keeps the current "theme changes cause a rebuild" + feature). * #1296: Fix invalid charset in HTML help generated HTML files for default locale. diff --git a/sphinx/jinja2glue.py b/sphinx/jinja2glue.py index 300cfef6e..a298d2eaf 100644 --- a/sphinx/jinja2glue.py +++ b/sphinx/jinja2glue.py @@ -95,9 +95,11 @@ class BuiltinTemplateLoader(TemplateBridge, BaseLoader): # then the theme parent paths loaderchain = pathchain + theme.themepath elif dirs: - pathchain = loaderchain = list(dirs) + pathchain = list(dirs) + loaderchain = list(dirs) else: - pathchain = loaderchain = [] + pathchain = [] + loaderchain = [] # prepend explicit template paths self.templatepathlen = len(builder.config.templates_path) diff --git a/tests/roots/test-templating/_templates/autosummary/class.rst b/tests/roots/test-templating/_templates/autosummary/class.rst new file mode 100644 index 000000000..7f1536173 --- /dev/null +++ b/tests/roots/test-templating/_templates/autosummary/class.rst @@ -0,0 +1,8 @@ +{% extends "!autosummary/class.rst" %} + +{% block methods %} + + .. note:: autosummary/class.rst method block overloading + + {{ super() }} +{% endblock %} diff --git a/tests/roots/test-templating/_templates/layout.html b/tests/roots/test-templating/_templates/layout.html new file mode 100644 index 000000000..f836c7737 --- /dev/null +++ b/tests/roots/test-templating/_templates/layout.html @@ -0,0 +1,6 @@ +{% extends "!layout.html" %} + +{% block extrahead %} + +{{ super() }} +{% endblock %} diff --git a/tests/roots/test-templating/autosummary_templating.txt b/tests/roots/test-templating/autosummary_templating.txt new file mode 100644 index 000000000..05643a02d --- /dev/null +++ b/tests/roots/test-templating/autosummary_templating.txt @@ -0,0 +1,13 @@ +Autosummary templating test +=========================== + +.. autosummary:: + :toctree: generated + + sphinx.application.Sphinx + +.. currentmodule:: sphinx.application + +.. autoclass:: TemplateBridge + + .. automethod:: render diff --git a/tests/roots/test-templating/conf.py b/tests/roots/test-templating/conf.py new file mode 100644 index 000000000..225da82e7 --- /dev/null +++ b/tests/roots/test-templating/conf.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- + +project = 'Sphinx templating ' +source_suffix = '.txt' +keep_warnings = True +templates_path = ['_templates'] +release = version = '2013.120' + +extensions = ['sphinx.ext.autosummary'] +autosummary_generate = ['autosummary_templating'] + diff --git a/tests/roots/test-templating/contents.txt b/tests/roots/test-templating/contents.txt new file mode 100644 index 000000000..04a40e21c --- /dev/null +++ b/tests/roots/test-templating/contents.txt @@ -0,0 +1,7 @@ +Welcome to Sphinx Tests's documentation! +======================================== + +.. toctree:: + + autosummary_templating + diff --git a/tests/test_templating.py b/tests/test_templating.py new file mode 100644 index 000000000..025d6fd07 --- /dev/null +++ b/tests/test_templating.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +""" + test_templating + ~~~~~~~~~~~~~~~~ + + Test templating. + + :copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +from util import test_roots, with_app + + +def teardown_module(): + (test_roots / 'test-templating' / '_build').rmtree(True), + + +@with_app(buildername='html', srcdir=(test_roots / 'test-templating')) +def test_layout_overloading(app): + app.builder.build_all() + + result = (app.outdir / 'contents.html').text(encoding='utf-8') + + assert '' in result + + +@with_app(buildername='html', srcdir=(test_roots / 'test-templating')) +def test_autosummary_class_template_overloading(app): + app.builder.build_all() + + result = (app.outdir / 'generated' / 'sphinx.application.Sphinx.html').text( + encoding='utf-8') + + assert 'autosummary/class.rst method block overloading' in result +