Can you try again? I think I fixed this in trunk.
On Tuesday, 2 October 2012 22:08:58 UTC-5, Matt wrote: > > Just testing it now, Getting an error on GAE + CloudSQL: > > File "/Projects/www//applications/app/models/db.py", line 45, in <module> > auth.define_tables() > File "/Projects/www/gluon/tools.py", line 1506, in define_tables > format='%(first_name)s %(last_name)s (%(id)s)')) > File "/Projects/www/gluon/dal.py", line 7050, in define_table > table = self.lazy_define_table(tablename,*fields,**args) > File "/Projects/www/gluon/dal.py", line 7081, in lazy_define_table > polymodel=polymodel) > File "/Projects/www/gluon/dal.py", line 935, in create_table > self.file_close(tfile) > File "/Projects/www/gluon/dal.py", line 4005, in file_close > fileobj.close() > AttributeError: DatabaseStoredFile instance has no attribute 'close' > > Matt > > On Tuesday, October 2, 2012 3:32:16 PM UTC+13, Massimo Di Pierro wrote: >> >> There is a big change in DAL. >> >> a = DAL(uri) >> b = DAL(uri) >> >> now "a is b" because DAL is a singleton (almost). It is a thread local >> singleton as long a uri is specified. >> What does this mean in practice? >> >> It means that unless you have lazy virtual fields, Row and Rows objects >> can be serialized (pickled), properly cached, and stored in session. >> For example: >> >> session.rows = session.rows or db(db.mytable).select() >> >> and you can still do: >> >> session.rows.first().update_record(....) >> >> has many practical implications in the way you program and there is even >> more we could do. In the future we may be able to serialize every DAL >> expression. >> >> This is a big change in the source and the internal logic is complex. >> It may have some unforeseen side effects. >> PLEASE TEST THAT TRUNK DOES NOT BREAK YOUR CODE before this makes it into >> stable. >> >> massimo >> >> >> >> >> >> --