Skip to content

Commit c015f97

Browse files
authored
Merge pull request #9251 from tk0miya/9216_support_jinja2-3
Close #9216: Support jinja2-3.0
2 parents ca36c9a + 4b8fb68 commit c015f97

File tree

6 files changed

+29
-17
lines changed

6 files changed

+29
-17
lines changed

CHANGES

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ Release 4.0.2 (in development)
44
Dependencies
55
------------
66

7+
* #9216: Support jinja2-3.0
8+
79
Incompatible changes
810
--------------------
911

setup.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@
2121
'sphinxcontrib-htmlhelp',
2222
'sphinxcontrib-serializinghtml',
2323
'sphinxcontrib-qthelp',
24-
'Jinja2>=2.3,<3.0',
25-
'MarkupSafe<2.0',
24+
'Jinja2>=2.3',
2625
'Pygments>=2.0',
2726
'docutils>=0.14,<0.18',
2827
'snowballstemmer>=1.1',

sphinx/jinja2glue.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from pprint import pformat
1313
from typing import TYPE_CHECKING, Any, Callable, Dict, Iterator, List, Tuple, Union
1414

15-
from jinja2 import BaseLoader, FileSystemLoader, TemplateNotFound, contextfunction
15+
from jinja2 import BaseLoader, FileSystemLoader, TemplateNotFound
1616
from jinja2.environment import Environment
1717
from jinja2.sandbox import SandboxedEnvironment
1818
from jinja2.utils import open_if_exists
@@ -22,6 +22,11 @@
2222
from sphinx.util import logging
2323
from sphinx.util.osutil import mtimes_of_files
2424

25+
try:
26+
from jinja2.utils import pass_context
27+
except ImportError:
28+
from jinja2 import contextfunction as pass_context
29+
2530
if TYPE_CHECKING:
2631
from sphinx.builders import Builder
2732

@@ -101,7 +106,7 @@ def __next__(self) -> int:
101106
next = __next__ # Python 2/Jinja compatibility
102107

103108

104-
@contextfunction
109+
@pass_context
105110
def warning(context: Dict, message: str, *args: Any, **kwargs: Any) -> str:
106111
if 'pagename' in context:
107112
filename = context.get('pagename') + context.get('file_suffix', '')
@@ -180,9 +185,9 @@ def init(self, builder: "Builder", theme: Theme = None, dirs: List[str] = None)
180185
self.environment.filters['toint'] = _toint
181186
self.environment.filters['todim'] = _todim
182187
self.environment.filters['slice_index'] = _slice_index
183-
self.environment.globals['debug'] = contextfunction(pformat)
188+
self.environment.globals['debug'] = pass_context(pformat)
184189
self.environment.globals['warning'] = warning
185-
self.environment.globals['accesskey'] = contextfunction(accesskey)
190+
self.environment.globals['accesskey'] = pass_context(accesskey)
186191
self.environment.globals['idgen'] = idgen
187192
if use_i18n:
188193
self.environment.install_gettext_translations(builder.app.translator)

sphinx/util/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ def save_traceback(app: "Sphinx") -> str:
235235
platform.python_version(),
236236
platform.python_implementation(),
237237
docutils.__version__, docutils.__version_details__,
238-
jinja2.__version__, # type: ignore
238+
jinja2.__version__,
239239
last_msgs)).encode())
240240
if app is not None:
241241
for ext in app.extensions.values():

sphinx/util/rst.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,17 @@
1818
from docutils.parsers.rst.languages import en as english
1919
from docutils.statemachine import StringList
2020
from docutils.utils import Reporter
21-
from jinja2 import Environment, environmentfilter
21+
from jinja2 import Environment
2222

2323
from sphinx.locale import __
2424
from sphinx.util import docutils, logging
2525

26+
try:
27+
from jinja2.utils import pass_environment
28+
except ImportError:
29+
from jinja2 import environmentfilter as pass_environment
30+
31+
2632
logger = logging.getLogger(__name__)
2733

2834
docinfo_re = re.compile(':\\w+:.*?')
@@ -51,11 +57,11 @@ def charwidth(char: str, widechars: str) -> int:
5157
return sum(charwidth(c, widechars) for c in text)
5258

5359

54-
@environmentfilter
60+
@pass_environment
5561
def heading(env: Environment, text: str, level: int = 1) -> str:
5662
"""Create a heading for *level*."""
5763
assert level <= 3
58-
width = textwidth(text, WIDECHARS[env.language]) # type: ignore
64+
width = textwidth(text, WIDECHARS[env.language])
5965
sectioning_char = SECTIONING_CHARS[level - 1]
6066
return '%s\n%s' % (text, sectioning_char * width)
6167

sphinx/util/tags.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -69,18 +69,18 @@ def eval_condition(self, condition: str) -> bool:
6969

7070
def eval_node(node: Node) -> bool:
7171
if isinstance(node, nodes.CondExpr):
72-
if eval_node(node.test): # type: ignore
73-
return eval_node(node.expr1) # type: ignore
72+
if eval_node(node.test):
73+
return eval_node(node.expr1)
7474
else:
75-
return eval_node(node.expr2) # type: ignore
75+
return eval_node(node.expr2)
7676
elif isinstance(node, nodes.And):
77-
return eval_node(node.left) and eval_node(node.right) # type: ignore
77+
return eval_node(node.left) and eval_node(node.right)
7878
elif isinstance(node, nodes.Or):
79-
return eval_node(node.left) or eval_node(node.right) # type: ignore
79+
return eval_node(node.left) or eval_node(node.right)
8080
elif isinstance(node, nodes.Not):
81-
return not eval_node(node.node) # type: ignore
81+
return not eval_node(node.node)
8282
elif isinstance(node, nodes.Name):
83-
return self.tags.get(node.name, False) # type: ignore
83+
return self.tags.get(node.name, False)
8484
else:
8585
raise ValueError('invalid node, check parsing')
8686

0 commit comments

Comments
 (0)