]> git.ipfire.org Git - thirdparty/jinja.git/commitdiff
Resolved extends errors in async mode (Fixes #668)
authorArmin Ronacher <armin.ronacher@active-4.com>
Tue, 24 Jan 2017 19:22:19 +0000 (20:22 +0100)
committerArmin Ronacher <armin.ronacher@active-4.com>
Tue, 24 Jan 2017 19:22:19 +0000 (20:22 +0100)
CHANGES
jinja2/compiler.py
tests/test_async.py

diff --git a/CHANGES b/CHANGES
index faa319c09810ec94d849c906d36cf64d01e35e9b..be33089294ba96040263599ed7fb3db8cd463a93 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -13,6 +13,8 @@ Version 2.9.5
 - Correctly use the buffer for the else block of for loops.  This caused
   invalid syntax errors to be caused on 2.x and completely wrong behavior
   on Python 3 (#669)
+- Resolve an issue where the `{% extends %}` tag could not be used with
+  async environments. (#668)
 
 Version 2.9.4
 -------------
index 0765675e5d64af1e427ddaf8adedff6440fd0f18..b2ab6fe6a899e2f50aae468ac3aacab08d017adf 100644 (file)
@@ -734,12 +734,13 @@ class CodeGenerator(NodeVisitor):
                 self.indent()
                 self.writeline('if parent_template is not None:')
             self.indent()
-            if supports_yield_from:
+            if supports_yield_from and not self.environment.is_async:
                 self.writeline('yield from parent_template.'
                                'root_render_func(context)')
             else:
-                self.writeline('for event in parent_template.'
-                               'root_render_func(context):')
+                self.writeline('%sfor event in parent_template.'
+                               'root_render_func(context):' %
+                               (self.environment.is_async and 'async ' or ''))
                 self.indent()
                 self.writeline('yield event')
                 self.outdent()
index bd3ef50aab58c5b910c0cb2c7afc7c796ada4a8a..8618d8d0cbce149512357b90ebb4b7ae53941c5a 100644 (file)
@@ -464,3 +464,7 @@ class TestAsyncForLoop(object):
             '<url><loc>/bar</loc></url>',
             '</urlset>',
         ]
+
+    def test_bare_async(self, test_env_async):
+        t = test_env_async.from_string('{% extends "header" %}')
+        assert t.render(foo=42) == '[42|23]'