summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2013-08-04 00:04:07 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2013-08-04 00:04:07 -0400
commit10ca8d3a5b4e7b20a7b9be34c832ab1edb9bb6d7 (patch)
treeba01429aecc910841d6dfa1b67f75046cd2e8346
parent82d4954148bd3459a2f6fe0fdacc9118b649d316 (diff)
downloadmako-10ca8d3a5b4e7b20a7b9be34c832ab1edb9bb6d7.tar.gz
- fix #190 for py2.4rel_0_9_0
- other 2.4 ism
-rw-r--r--CHANGES3
-rw-r--r--mako/pyparser.py21
-rw-r--r--test/test_ast.py12
-rw-r--r--test/test_runtime.py2
4 files changed, 32 insertions, 6 deletions
diff --git a/CHANGES b/CHANGES
index d43cbd3..6cb9a7c 100644
--- a/CHANGES
+++ b/CHANGES
@@ -21,7 +21,8 @@
[ticket:207]
- [bug] Fixed Py3K bug where a "lambda" expression was not
- interpreted correctly within a template tag. [ticket:190]
+ interpreted correctly within a template tag; also
+ fixed in Py2.4. [ticket:190]
0.8.1
- [bug] Changed setup.py to skip installing markupsafe
diff --git a/mako/pyparser.py b/mako/pyparser.py
index b305707..5499076 100644
--- a/mako/pyparser.py
+++ b/mako/pyparser.py
@@ -540,6 +540,27 @@ else:
self.visit(a)
self.buf.write(')')
+ def visitLambda(self, node, *args):
+ self.buf.write('lambda ')
+
+ argnames = list(node.argnames)
+
+ kw = arg = None
+ if node.kwargs > 0:
+ kw = argnames.pop(-1)
+ if node.varargs > 0:
+ arg = argnames.pop(-1)
+
+ if arg:
+ argnames.append("*%s" % arg)
+ if kw:
+ argnames.append("**%s" % kw)
+
+ self.buf.write(", ".join(argnames))
+
+ self.buf.write(': ')
+ self.visit(node.code)
+
class walker(visitor.ASTVisitor):
diff --git a/test/test_ast.py b/test/test_ast.py
index 008bd55..be93751 100644
--- a/test/test_ast.py
+++ b/test/test_ast.py
@@ -316,7 +316,8 @@ import x as bar
"repr({'x':-1})", "repr(((1,2,3), (4,5,6)))",
"repr(1 and 2 and 3 and 4)",
"repr(True and False or 55)",
- "repr(lambda x, y: x+y)",
+ "repr(lambda x, y: (x + y))",
+ "repr(lambda *arg, **kw: arg, kw)",
"repr(1 & 2 | 3)",
"repr(3//5)",
"repr(3^5)",
@@ -327,9 +328,12 @@ import x as bar
local_dict = {}
astnode = pyparser.parse(code)
newcode = pyparser.ExpressionGenerator(astnode).value()
- eq_(eval(code, local_dict),
- eval(newcode, local_dict)
- )
+ if "lambda" in code:
+ eq_(code, newcode)
+ else:
+ eq_(eval(code, local_dict),
+ eval(newcode, local_dict)
+ )
diff --git a/test/test_runtime.py b/test/test_runtime.py
index af7dbee..80b97ce 100644
--- a/test/test_runtime.py
+++ b/test/test_runtime.py
@@ -2,7 +2,7 @@
"""
from mako import runtime
import unittest
-from . import eq_
+from test import eq_
class ContextTest(unittest.TestCase):
def test_locals_kwargs(self):