Revert "Update parsetree.py removed "?" from for x in re.compile(r"(\${.+})" …"
This reverts part of commit 042a63f9d375812d46de758242d75c30e640b4e1.
Reverted the fix for :ticket:`400` as it caused new issues when traversing
some bracketed situations.
Fixes: #401
Change-Id: I6310c4cc91bfce2852a91a7b5db88eb652ae9e38
diff --git a/doc/build/changelog.rst b/doc/build/changelog.rst
index 23d362a..bf954f2 100644
--- a/doc/build/changelog.rst
+++ b/doc/build/changelog.rst
@@ -11,11 +11,11 @@
:include_notes_from: unreleased
.. changelog::
- :version: 1.3.4
+ :version: 1.3.4 (yanked)
:released: Mon May 13 2024
.. change::
- :tags: bug, parser
+ :tags: bug, lexer
:tickets: 398
Fixed regression caused by the fix for :ticket:`320` where new logic added
@@ -31,6 +31,9 @@
dictionary literals, would fail to be interpreted correctly even though the
initial parsing is correct. Pull request courtesy Jose Galvez.
+ .. note:: this change was **reverted** and release 1.3.4 was yanked as
+ this fix caused regressions.
+
.. changelog::
:version: 1.3.3
:released: Wed Apr 10 2024
diff --git a/doc/build/unreleased/400.rst b/doc/build/unreleased/400.rst
new file mode 100644
index 0000000..2c98fdf
--- /dev/null
+++ b/doc/build/unreleased/400.rst
@@ -0,0 +1,7 @@
+.. change::
+ :tags: bug, lexer, regression
+ :tickets: 400, 401
+
+ Reverted the fix for :ticket:`400` as it caused new issues when traversing
+ some bracketed situations.
+
diff --git a/mako/parsetree.py b/mako/parsetree.py
index dae707c..04686ec 100644
--- a/mako/parsetree.py
+++ b/mako/parsetree.py
@@ -322,10 +322,10 @@
for key in self.attributes:
if key in expressions:
expr = []
- for x in re.compile(r"(\${.+})", re.S).split(
+ for x in re.compile(r"(\${.+?})", re.S).split(
self.attributes[key]
):
- m = re.compile(r"^\${(.+)}$", re.S).match(x)
+ m = re.compile(r"^\${(.+?)}$", re.S).match(x)
if m:
code = ast.PythonCode(
m.group(1).rstrip(), **self.exception_kwargs
diff --git a/test/test_lexer.py b/test/test_lexer.py
index b1a796c..d8029a1 100644
--- a/test/test_lexer.py
+++ b/test/test_lexer.py
@@ -810,7 +810,25 @@
),
)
- def test_dict_expression(self):
+ def test_dict_expression_issue_400_regression(self):
+ """test for issue #401.
+
+ This was the regression case for #400
+
+ """
+ template = '<%include file="${foo}${bar}"/>'
+
+ nodes = Lexer(template).parse()
+ self._compare(
+ nodes,
+ TemplateNode(
+ {},
+ [IncludeTag("include", {"file": "${foo}${bar}"}, (1, 1), [])],
+ ),
+ )
+
+ def _dont_test_dict_expression_issue_400(self):
+ """test for issue #400"""
template = """
<%def name="dtest(d)">
% for k,v in d.items():
@@ -868,7 +886,8 @@
),
)
- def test_dict_expression_2(self):
+ def _dont_test_dict_expression_2_issue_400(self):
+ """test for issue #400"""
template = """
<%def name="thing(thing)">
${type(thing)}