Expected Behavior
Able to iterate over ChainableUndefined.
Minimal code to reproduce
import asyncio
from jinja2 import Environment, ChainableUndefined
html = """
{% for x in data['y']['z'] %}
{{ x }}
{% endfor %}
"""
jinja_env = Environment(
enable_async=True,
undefined=ChainableUndefined,
)
async def main():
template = jinja_env.from_string(html)
output = await template.render_async(data={})
if __name__ == '__main__':
asyncio.run(main())
Stacktrace
Traceback (most recent call last):
File "jinja_bug.py", line 21, in <module>
asyncio.run(main())
File "/usr/local/Cellar/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8/lib/python3.8/asyncio/runners.py", line 43, in run
return loop.run_until_complete(main)
File "/usr/local/Cellar/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
return future.result()
File "jinja_bug.py", line 17, in main
output = await template.render_async(data={})
File "./jinja_bug_mvp/env/lib/python3.8/site-packages/jinja2/asyncsupport.py", line 65, in render_async
return self.environment.handle_exception()
File "./jinja_bug_mvp/env/lib/python3.8/site-packages/jinja2/environment.py", line 832, in handle_exception
reraise(*rewrite_traceback_stack(source=source))
File "./jinja_bug_mvp/env/lib/python3.8/site-packages/jinja2/_compat.py", line 28, in reraise
raise value.with_traceback(tb)
File "./jinja_bug_mvp/env/lib/python3.8/site-packages/jinja2/asyncsupport.py", line 25, in concat_async
await collect()
File "./jinja_bug_mvp/env/lib/python3.8/site-packages/jinja2/asyncsupport.py", line 22, in collect
async for event in async_gen:
File "<template>", line 2, in top-level template code
File "./jinja_bug_mvp/env/lib/python3.8/site-packages/jinja2/asyncsupport.py", line 180, in auto_aiter
async for item in iterable:
TypeError: 'async for' requires an object with __aiter__ method, got ChainableUndefined
Actual Behaviour
TypeError is being raised when async is enabled. Seems to be working fine when rendering synchronously with enable_async=False.
Your Environment
- Python version: 3.8.5
- Jinja version: 2.11.2
Expected Behavior
Able to iterate over
ChainableUndefined.Minimal code to reproduce
Stacktrace
Actual Behaviour
TypeErroris being raised when async is enabled. Seems to be working fine when rendering synchronously withenable_async=False.Your Environment