diff options
author | David Lord <davidism@gmail.com> | 2021-08-09 11:10:01 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-09 11:10:01 -0700 |
commit | 531145d28b2207f9f7886eebdc2171b13e681018 (patch) | |
tree | 25efb577e1696c2bd9fc611201a618f5092b2e5c | |
parent | 189132094135d4c84414404c3b388500d35dc49e (diff) | |
parent | d5f49f5cc135f1a78704dba7db8212be2388b50e (diff) | |
download | jinja2-531145d28b2207f9f7886eebdc2171b13e681018.tar.gz |
Merge pull request #1455 from ewjoachim/undefined-contains-1204
Only StrictUndefined.__contains__ raises error
-rw-r--r-- | CHANGES.rst | 4 | ||||
-rw-r--r-- | src/jinja2/runtime.py | 3 | ||||
-rw-r--r-- | tests/test_api.py | 3 |
3 files changed, 6 insertions, 4 deletions
diff --git a/CHANGES.rst b/CHANGES.rst index 116461a..074dd1f 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -3,12 +3,12 @@ Version 3.0.2 ------------- -Unreleased - - Fix a loop scoping bug that caused assignments in nested loops to still be referenced outside of it. :issue:`1427` - Make ``compile_templates`` deterministic for filter and import names. :issue:`1452, 1453` +- Revert an unintended change that caused ``Undefined`` to act like + ``StrictUndefined`` for the ``in`` operator. :issue:`1448` Version 3.0.1 diff --git a/src/jinja2/runtime.py b/src/jinja2/runtime.py index 87bb132..2346cf2 100644 --- a/src/jinja2/runtime.py +++ b/src/jinja2/runtime.py @@ -915,7 +915,7 @@ class Undefined: __floordiv__ = __rfloordiv__ = _fail_with_undefined_error __mod__ = __rmod__ = _fail_with_undefined_error __pos__ = __neg__ = _fail_with_undefined_error - __call__ = __getitem__ = __contains__ = _fail_with_undefined_error + __call__ = __getitem__ = _fail_with_undefined_error __lt__ = __le__ = __gt__ = __ge__ = _fail_with_undefined_error __int__ = __float__ = __complex__ = _fail_with_undefined_error __pow__ = __rpow__ = _fail_with_undefined_error @@ -1091,6 +1091,7 @@ class StrictUndefined(Undefined): __slots__ = () __iter__ = __str__ = __len__ = Undefined._fail_with_undefined_error __eq__ = __ne__ = __bool__ = __hash__ = Undefined._fail_with_undefined_error + __contains__ = Undefined._fail_with_undefined_error # Remove slots attributes, after the metaclass is applied they are diff --git a/tests/test_api.py b/tests/test_api.py index 774bb3c..4db3b4a 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -316,7 +316,7 @@ class TestUndefined: assert env.from_string("{{ foo.missing }}").render(foo=42) == "" assert env.from_string("{{ not missing }}").render() == "True" pytest.raises(UndefinedError, env.from_string("{{ missing - 1}}").render) - pytest.raises(UndefinedError, env.from_string("{{ 'foo' in missing }}").render) + assert env.from_string("{{ 'foo' in missing }}").render() == "False" und1 = Undefined(name="x") und2 = Undefined(name="y") assert und1 == und2 @@ -375,6 +375,7 @@ class TestUndefined: pytest.raises(UndefinedError, env.from_string("{{ missing }}").render) pytest.raises(UndefinedError, env.from_string("{{ missing.attribute }}").render) pytest.raises(UndefinedError, env.from_string("{{ missing|list }}").render) + pytest.raises(UndefinedError, env.from_string("{{ 'foo' in missing }}").render) assert env.from_string("{{ missing is not defined }}").render() == "True" pytest.raises( UndefinedError, env.from_string("{{ foo.missing }}").render, foo=42 |