Fixed. It was the migration trying to figure out the default in NOT NULL define tables.
On May 25, 8:48 pm, Carlos <[email protected]> wrote: > Hi, > > Why are field default lambdas being executed always (as part of > define_table)?. > > * Example: > > def xdefault(v): > print '===== VALUE > %s' % v > return v > > db.define_table( > 'xtable', > Field('xfield1', default=lambda: xdefault('v1')), > Field('xfield2', default=lambda: xdefault('v2')), > Field('xfield3', default=lambda: xdefault('v3')), > ) > > * Output: > > ===== VALUE > v1 > ===== VALUE > v2 > ===== VALUE > v3 > > * Stack trace for one of them: > > File C:\web2py\gluon\dal.py in define_table at line 4156 > > self._adapter.create_table(t,migrate=migrate,fake_migrate=fake_migrate,poly > model=polymodel) > File C:\web2py\gluon\dal.py in create_table at line 551 > not_null = self.NOT_NULL(field.default,field.type) > File C:\web2py\gluon\dal.py in NOT_NULL at line 750 > return 'NOT NULL DEFAULT %s' % self.represent(default,field_type) > File C:\web2py\gluon\dal.py in represent at line 1200 > obj = obj() > File C:\web2py\applications\test\models\db.py in <lambda> at line 88 > ... Field('xfield', default=lambda: xdefault('===== VALUE =====')), > ... > File C:\web2py\applications\test\models\db.py in xdefault at line 83 > > I thought it was safe to put lambdas as field default values with the > certainty that they won't be executed unless / until absolutely required > (when new instances of the table are created without such default values), > i.e. deferred execution. > > Is this the expected behavior?. > > p.s. I'm using trunk. > > Thanks, > > Carlos

