diff options
author | David Lord <davidism@gmail.com> | 2021-11-09 12:50:28 -0800 |
---|---|---|
committer | David Lord <davidism@gmail.com> | 2021-11-10 11:07:04 -0800 |
commit | 6faf093f9dc6d605d1b7c2285b1a2d8223b7b537 (patch) | |
tree | 85476abf89617d932c9a7a89baa49b534698ebf7 | |
parent | 88745a2b9edc536322828b162695353fa2d95bff (diff) | |
download | jinja2-6faf093f9dc6d605d1b7c2285b1a2d8223b7b537.tar.gz |
remove deprecated legacy resolve mode for context subclass
-rw-r--r-- | CHANGES.rst | 3 | ||||
-rw-r--r-- | src/jinja2/runtime.py | 38 | ||||
-rw-r--r-- | tests/test_regression.py | 17 |
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 -%}" |