On Dec 31, 2010, at 8:06 PM, DenesL wrote:
> 
>> The ideal solution would be one that allowed using T() normally in gluon (at 
>> least in code that's invoked from an application); that avoids the T=T 
>> requirement.
>> 
>> My conjecture is when Python compiles the gluon code, it binds T references 
>> (to what? that's the hole in my theory) at compile time, and thus ignores 
>> the presence of T in globals. Making T an argument forces Python to defer 
>> binding.
>> 
> The funny part is that T is in environment (!!!?) so
> exec ccode in environment
> should work, I don't see why it does not.
> 

OK, here's part of the riddle solved. If I call T in gluon.validators, and run 
web2py:

  File "/Users/jlundell/Projects/web2py/web2py-hg/gluon/validators.py", line 
123, in IS_MATCH
    def __init__(self, expression, error_message=T('invalid expression')):
NameError: name 'T' is not defined

So no funny business with binding; it just doesn't compile.

Reply via email to