Skip to content

Commit

Permalink
Fix support comprehensions inside functions when use strict_undefined…
Browse files Browse the repository at this point in the history
Fixed regression caused by the fix for 🎫`320` where new logic added
to interpret list and dictionary comprehensions would fail for expression
oriented keys.  As the parsing in question was not necessary for these
keys, it's been removed.  Pull request courtesy Sébastien Granjoux.

Fixes: #398
Closes: #399
Pull-request: #399
Pull-request-sha: d708e27

Change-Id: Icc253e66b99ad30b3d2353e896c8345f4e94ad9a
  • Loading branch information
Sébastien Granjoux authored and zzzeek committed May 13, 2024
1 parent af80cbd commit 30a6223
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 5 deletions.
8 changes: 8 additions & 0 deletions doc/build/unreleased/398.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
.. change::
:tags: bug, parser
:tickets: 398

Fixed regression caused by the fix for :ticket:`320` where new logic added
to interpret list and dictionary comprehensions would fail for expression
oriented keys. As the parsing in question was not necessary for these
keys, it's been removed. Pull request courtesy Sébastien Granjoux.
4 changes: 0 additions & 4 deletions mako/pyparser.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,8 +92,6 @@ def visit_FunctionDef(self, node):

def visit_ListComp(self, node):
if self.in_function:
if not isinstance(node.elt, _ast.Name):
self.visit(node.elt)
for comp in node.generators:
self.visit(comp.iter)
else:
Expand All @@ -103,8 +101,6 @@ def visit_ListComp(self, node):

def visit_DictComp(self, node):
if self.in_function:
if not isinstance(node.key, _ast.Name):
self.visit(node.elt)
for comp in node.generators:
self.visit(comp.iter)
else:
Expand Down
2 changes: 1 addition & 1 deletion setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ show-source = true
enable-extensions = G
# E203 is due to https://github.com/PyCQA/pycodestyle/issues/373
ignore =
A003,
A003,A005
D,
E203,E305,E711,E712,E721,E722,E741,
N801,N802,N806,
Expand Down
15 changes: 15 additions & 0 deletions test/test_template.py
Original file line number Diff line number Diff line change
Expand Up @@ -878,6 +878,21 @@ def test_list_comprehensions_plus_undeclared_strict(self):

eq_(result_lines(t.render(t="T")), ["t is: T", "a,b,c"])

def test_dict_comprehensions_in_function_plus_undeclared_strict(self):
t = Template(
"""
<%
def foo():
return {s[0]: s for s in ('foo',)}
%>
${ foo()['f'] }
""",
strict_undefined=True,
)

eq_(result_lines(t.render()), ["foo"])


class StopRenderingTest(TemplateTest):
def test_return_in_template(self):
Expand Down

0 comments on commit 30a6223

Please sign in to comment.