if not unoptimize_before_dead_code:
self.writeline('dummy = lambda *x: None')
+ if self.environment._async:
+ self.writeline('from jinja2.asyncsupport import auto_await')
+
# if we want a deferred initialization we cannot move the
# environment into a local name
envenv = not self.defer_init and ', environment=environment' or ''
self.write(')')
def visit_Call(self, node, frame, forward_caller=False):
+ if self.environment._async:
+ self.write('await auto_await(')
if self.environment.sandboxed:
self.write('environment.call(context, ')
else:
extra_kwargs = forward_caller and {'caller': 'caller'} or None
self.signature(node, frame, extra_kwargs)
self.write(')')
+ if self.environment._async:
+ self.write(')')
def visit_Keyword(self, node, frame):
self.write(node.key + '=')
rv = run(func)
assert rv == '[1][2][3]'
+
+
+@pytest.mark.skipif(not have_async_gen, reason='No async generators')
+def test_await_on_calls():
+ t = Template('{{ async_func() + normal_func() }}',
+ enable_async=True)
+
+ async def async_func():
+ return 42
+
+ def normal_func():
+ return 23
+
+ async def func():
+ return await t.render_async(
+ async_func=async_func,
+ normal_func=normal_func
+ )
+
+ rv = run(func)
+ assert rv == '65'