]> git.ipfire.org Git - thirdparty/jinja.git/commitdiff
add Undefined.__aiter__ 1294/head
authorJafnee <jafnee.jesmee@jewelpaymentech.com>
Wed, 23 Sep 2020 10:34:58 +0000 (18:34 +0800)
committerDavid Lord <davidism@gmail.com>
Mon, 5 Apr 2021 17:51:29 +0000 (10:51 -0700)
CHANGES.rst
src/jinja2/runtime.py
tests/test_async.py

index 2dccbfc31c08d167099f9f618b5bcaa8e5c3dcfc..45ff144430fbbbfb82fbfc7b5eb20a8ae44e1144 100644 (file)
@@ -54,6 +54,7 @@ Unreleased
     :issue:`1170`
 -   ``Undefined.__contains__`` (``in``) raises an ``UndefinedError``
     instead of a ``TypeError``. :issue:`1198`
+-   ``Undefined`` is iterable in an async environment. :issue:`1294`
 
 
 Version 2.11.3
index ca49db768dabaf587e835356e5965436df27a525..c3d6fa4cc9fe542bf6b30c120ae167223ef9b056 100644 (file)
@@ -778,6 +778,10 @@ class Undefined:
     def __iter__(self):
         yield from ()
 
+    async def __aiter__(self):
+        for _ in ():
+            yield
+
     def __bool__(self):
         return False
 
index 5cc8ba689be2ca1ee9221d3f14bddd9906fc8002..44b4bf13cf70a1ff01cabd3adba634a3d2e698bd 100644 (file)
@@ -2,6 +2,7 @@ import asyncio
 
 import pytest
 
+from jinja2 import ChainableUndefined
 from jinja2 import DictLoader
 from jinja2 import Environment
 from jinja2 import Template
@@ -588,3 +589,16 @@ def test_namespace_awaitable(test_env_async):
         assert actual == "Bar"
 
     run(_test())
+
+
+def test_chainable_undefined_aiter():
+    async def _test():
+        t = Template(
+            "{% for x in a['b']['c'] %}{{ x }}{% endfor %}",
+            enable_async=True,
+            undefined=ChainableUndefined,
+        )
+        rv = await t.render_async(a={})
+        assert rv == ""
+
+    run(_test())