summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Lord <davidism@gmail.com>2021-04-05 10:46:24 -0700
committerGitHub <noreply@github.com>2021-04-05 10:46:24 -0700
commit139c3eee816ce24fdf94fc7f26a05a6623fb9831 (patch)
treeef3b86f38d418b57140e78036b1477715261c562
parentfd001b216a80a40cdc5c9afc6c863ed763095470 (diff)
parent609bcb08312a844e88ff3239a0810c1ad36460d3 (diff)
downloadjinja2-139c3eee816ce24fdf94fc7f26a05a6623fb9831.tar.gz
Merge pull request #1204 from dparker2/undefined-contains
Raise UndefinedError from Undefined.__contains__
-rw-r--r--CHANGES.rst2
-rw-r--r--src/jinja2/runtime.py2
-rw-r--r--tests/test_api.py1
3 files changed, 4 insertions, 1 deletions
diff --git a/CHANGES.rst b/CHANGES.rst
index f45d523..2dccbfc 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -52,6 +52,8 @@ Unreleased
indent by. :pr:`1167`
- The parser understands hex, octal, and binary integer literals.
:issue:`1170`
+- ``Undefined.__contains__`` (``in``) raises an ``UndefinedError``
+ instead of a ``TypeError``. :issue:`1198`
Version 2.11.3
diff --git a/src/jinja2/runtime.py b/src/jinja2/runtime.py
index 557460f..ca49db7 100644
--- a/src/jinja2/runtime.py
+++ b/src/jinja2/runtime.py
@@ -755,7 +755,7 @@ class Undefined:
__floordiv__ = __rfloordiv__ = _fail_with_undefined_error
__mod__ = __rmod__ = _fail_with_undefined_error
__pos__ = __neg__ = _fail_with_undefined_error
- __call__ = __getitem__ = _fail_with_undefined_error
+ __call__ = __getitem__ = __contains__ = _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
diff --git a/tests/test_api.py b/tests/test_api.py
index 4b6e0ae..5b21bcc 100644
--- a/tests/test_api.py
+++ b/tests/test_api.py
@@ -317,6 +317,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)
und1 = Undefined(name="x")
und2 = Undefined(name="y")
assert und1 == und2