Mercurial > p > roundup > code
diff test/test_pythonexpr.py @ 5676:e70885fe72a4
issue2551026: template variable not defined even though it is.
Fix issue where variables defined in TAL expression are not
available in the scope of the definition. (Tom Ekberg (tekberg))
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Tue, 26 Mar 2019 17:31:28 -0400 |
| parents | |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/test_pythonexpr.py Tue Mar 26 17:31:28 2019 -0400 @@ -0,0 +1,30 @@ +""" +In Python 3, sometimes TAL "python:" expressions that refer to +variables but not all variables are recognized. That is in Python 2.7 +all variables used in a TAL "python:" expression are recognized as +references. In Python 3.5 (perhaps earlier), some TAL "python:" +expressions refer to variables but the reference generates an error +like this: + +<class 'NameError'>: name 'some_tal_variable' is not defined + +even when the variable is defined. Output after this message lists the +variable and its value. +""" + +import unittest + +from roundup.cgi.PageTemplates.PythonExpr import PythonExpr as PythonExprClass + +class ExprTest(unittest.TestCase): + def testExpr(self): + expr = '[x for x in context.assignedto ' \ + 'if x.realname not in user_realnames]' + pe = PythonExprClass('test', expr, None) + # Looking at the expression, only context and user_realnames are + # external variables. The names assignedto and realname are members, + # and x is local. + required_names = ['context', 'user_realnames'] + got_names = pe._f_varnames + for required_name in required_names: + self.assertIn(required_name, got_names)
