Skip to content

Commit

Permalink
Merge pull request #1143 from pallets/bugfix/attribute-access
Browse files Browse the repository at this point in the history
Fix attribute access in async code.
  • Loading branch information
davidism committed Jan 30, 2020
2 parents bbdafe3 + d61c1ea commit 3d5bfc6
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 4 deletions.
9 changes: 9 additions & 0 deletions 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
--------------

Expand Down
8 changes: 4 additions & 4 deletions src/jinja2/compiler.py
Expand Up @@ -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):
Expand All @@ -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)
Expand All @@ -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:
Expand Down
4 changes: 4 additions & 0 deletions tests/test_async.py
Expand Up @@ -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"

0 comments on commit 3d5bfc6

Please sign in to comment.