]> git.ipfire.org Git - thirdparty/jinja.git/commitdiff
Fixes #1448: Revert Undefined.__contains__ to 2.x behaviour 1455/head
authorJoachim Jablon <joachim.jablon@people-doc.com>
Wed, 26 May 2021 09:54:58 +0000 (11:54 +0200)
committerDavid Lord <davidism@gmail.com>
Mon, 9 Aug 2021 18:07:35 +0000 (11:07 -0700)
CHANGES.rst
src/jinja2/runtime.py
tests/test_api.py

index 116461af291ccabe4969df082189ed0408b51a4b..074dd1f803fbc9f3a4bebd37446f899e5863ddfc 100644 (file)
@@ -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
index 87bb1327e03ad9e34ac2eda0bc885bd43840ee20..2346cf2bac14c0652ef642540e6b9b5b5ba52ddd 100644 (file)
@@ -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
index 774bb3c9ca7d1742261aef3a9efe7b64323937c1..4db3b4a96a64075b88a7fc6c52acae789c690dad 100644 (file)
@@ -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