]> git.ipfire.org Git - thirdparty/jinja.git/commitdiff
remove deprecated legacy resolve mode for context subclass
authorDavid Lord <davidism@gmail.com>
Tue, 9 Nov 2021 20:50:28 +0000 (12:50 -0800)
committerDavid Lord <davidism@gmail.com>
Wed, 10 Nov 2021 19:07:04 +0000 (11:07 -0800)
CHANGES.rst
src/jinja2/runtime.py
tests/test_regression.py

index 7a3c420c555855cb64c35e9472510423c74e55e2..da7f17cc65ff33b54851135ba022cbca7f932551 100644 (file)
@@ -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
index 764091aa2676cf59d75e8cbbd4a2fc03c68abc07..ab7b042fff8f65270c13761bf6aeddbf4b1bf4c4 100644 (file)
@@ -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]
 
index 7e2336978e4badcd0d792bfa82555c9d9d9b5a93..46e492bdd5162e586adc8a8952aa28e52905f058 100644 (file)
@@ -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 -%}"