summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Lord <davidism@gmail.com>2021-11-09 12:50:28 -0800
committerDavid Lord <davidism@gmail.com>2021-11-10 11:07:04 -0800
commit6faf093f9dc6d605d1b7c2285b1a2d8223b7b537 (patch)
tree85476abf89617d932c9a7a89baa49b534698ebf7
parent88745a2b9edc536322828b162695353fa2d95bff (diff)
downloadjinja2-6faf093f9dc6d605d1b7c2285b1a2d8223b7b537.tar.gz
remove deprecated legacy resolve mode for context subclass
-rw-r--r--CHANGES.rst3
-rw-r--r--src/jinja2/runtime.py38
-rw-r--r--tests/test_regression.py17
3 files changed, 3 insertions, 55 deletions
diff --git a/CHANGES.rst b/CHANGES.rst
index 7a3c420..da7f17c 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -17,6 +17,9 @@ Unreleased
- ``Markup`` and ``escape`` should be imported from MarkupSafe.
- Compiled templates from very old Jinja versions may need to be
recompiled.
+ - Legacy resolve mode for ``Context`` subclasses is no longer
+ supported. Override ``resolve_or_missing`` instead of
+ ``resolve``.
Version 3.0.3
diff --git a/src/jinja2/runtime.py b/src/jinja2/runtime.py
index 764091a..ab7b042 100644
--- a/src/jinja2/runtime.py
+++ b/src/jinja2/runtime.py
@@ -161,27 +161,6 @@ class Context:
:class:`Undefined` object for missing variables.
"""
- _legacy_resolve_mode: t.ClassVar[bool] = False
-
- def __init_subclass__(cls) -> None:
- if "resolve_or_missing" in cls.__dict__:
- # If the subclass overrides resolve_or_missing it opts in to
- # modern mode no matter what.
- cls._legacy_resolve_mode = False
- elif "resolve" in cls.__dict__ or cls._legacy_resolve_mode:
- # If the subclass overrides resolve, or if its base is
- # already in legacy mode, warn about legacy behavior.
- import warnings
-
- warnings.warn(
- "Overriding 'resolve' is deprecated and will not have"
- " the expected behavior in Jinja 3.1. Override"
- " 'resolve_or_missing' instead ",
- DeprecationWarning,
- stacklevel=2,
- )
- cls._legacy_resolve_mode = True
-
def __init__(
self,
environment: "Environment",
@@ -239,15 +218,6 @@ class Context:
:param key: The variable name to look up.
"""
- if self._legacy_resolve_mode:
- if key in self.vars:
- return self.vars[key]
-
- if key in self.parent:
- return self.parent[key]
-
- return self.environment.undefined(name=key)
-
rv = self.resolve_or_missing(key)
if rv is missing:
@@ -265,14 +235,6 @@ class Context:
:param key: The variable name to look up.
"""
- if self._legacy_resolve_mode:
- rv = self.resolve(key)
-
- if isinstance(rv, Undefined):
- return missing
-
- return rv
-
if key in self.vars:
return self.vars[key]
diff --git a/tests/test_regression.py b/tests/test_regression.py
index 7e23369..46e492b 100644
--- a/tests/test_regression.py
+++ b/tests/test_regression.py
@@ -591,23 +591,6 @@ class TestBug:
env = MyEnvironment(loader=loader)
assert env.get_template("test").render(foobar="test") == "test"
- def test_legacy_custom_context(self, env):
- from jinja2.runtime import Context, missing
-
- with pytest.deprecated_call():
-
- class MyContext(Context):
- def resolve(self, name):
- if name == "foo":
- return 42
- return super().resolve(name)
-
- x = MyContext(env, parent={"bar": 23}, name="foo", blocks={})
- assert x._legacy_resolve_mode
- assert x.resolve_or_missing("foo") == 42
- assert x.resolve_or_missing("bar") == 23
- assert x.resolve_or_missing("baz") is missing
-
def test_recursive_loop_bug(self, env):
tmpl = env.from_string(
"{%- for value in values recursive %}1{% else %}0{% endfor -%}"