From 05dee9b87023930f8131cbc0815b56a23e973c3d Mon Sep 17 00:00:00 2001 From: Armin Ronacher Date: Thu, 30 Jan 2020 18:14:22 +0100 Subject: [PATCH 1/3] Fix attribute access in async code. Fixes #1141 --- src/jinja2/compiler.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/jinja2/compiler.py b/src/jinja2/compiler.py index cbc0546d2..f450ec6e3 100644 --- a/src/jinja2/compiler.py +++ b/src/jinja2/compiler.py @@ -1641,14 +1641,14 @@ def visit_Operand(self, node, frame): @optimizeconst def visit_Getattr(self, node, frame): if self.environment.is_async: - self.write("await auto_await(") + self.write("(await auto_await(") self.write("environment.getattr(") self.visit(node.node, frame) self.write(", %r)" % node.attr) if self.environment.is_async: - self.write(")") + self.write("))") @optimizeconst def visit_Getitem(self, node, frame): @@ -1660,7 +1660,7 @@ def visit_Getitem(self, node, frame): self.write("]") else: if self.environment.is_async: - self.write("await auto_await(") + self.write("(await auto_await(") self.write("environment.getitem(") self.visit(node.node, frame) @@ -1669,7 +1669,7 @@ def visit_Getitem(self, node, frame): self.write(")") if self.environment.is_async: - self.write(")") + self.write("))") def visit_Slice(self, node, frame): if node.start is not None: From 15d7e615f4dc81424ad15b852ca69d1d98129139 Mon Sep 17 00:00:00 2001 From: Armin Ronacher Date: Thu, 30 Jan 2020 18:16:38 +0100 Subject: [PATCH 2/3] Added regression test for slicing of attributes --- tests/test_async.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/test_async.py b/tests/test_async.py index f7e27922e..d6c4a239a 100644 --- a/tests/test_async.py +++ b/tests/test_async.py @@ -579,3 +579,7 @@ def test_nonrecursive_loop_filter(self, test_env_async): def test_bare_async(self, test_env_async): t = test_env_async.from_string('{% extends "header" %}') assert t.render(foo=42) == "[42|23]" + + def test_awaitable_property_slicing(self, test_env_async): + t = test_env_async.from_string("{% for x in a.b[:1] %}{{ x }}{% endfor %}") + assert t.render(a=dict(b=[1, 2, 3])) == "1" From d61c1ea70bfc98eb6a0dc690e2f0a1527fd80f10 Mon Sep 17 00:00:00 2001 From: David Lord Date: Thu, 30 Jan 2020 09:50:36 -0800 Subject: [PATCH 3/3] add changelog --- CHANGES.rst | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 21eb77651..9ec8a3a4a 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,5 +1,14 @@ .. currentmodule:: jinja2 +Version 2.11.1 +-------------- + +Unreleased + +- Fix a bug that prevented looking up a key after an attribute + (``{{ data.items[1:] }}``) in an async template. :issue:`1141` + + Version 2.11.0 --------------