Thread: [SQLObject] Problems with cacheValues and forceDBName argument
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
From: Evandro V. M. <ev...@as...> - 2006-01-05 15:12:51
Attachments:
test_deep_inheritance.diff
|
Hi all, hi Oleg ! When working with transactions it's normal to disable the sqlmeta cacheValues attribute. Using this approach I found a bug when trying to set an attribute created with forceDBName column argument. Attached there is patch for one of the tests explaining exactly my problem. I'm using postgres 7.4.8 and SQLObject 0.7.0. BTW, it seems that one of the tests using trunk is broken. See: sqlobject/tests/test_boundattributes.py FAILED TO LOAD MODULE Probably a new regression or is it my fault ? -- Um abraço. Evandro Vale Miquelito : ev...@as... Async Open Source - Brazil | http://www.async.com.br |
From: Oleg B. <ph...@ph...> - 2006-01-05 17:58:12
|
On Thu, Jan 05, 2006 at 01:12:35PM -0200, Evandro Vale Miquelito wrote: > When working with transactions it's normal to disable the sqlmeta > cacheValues attribute. Using this approach I found a bug when trying to > set an attribute created with forceDBName column argument. Attached > there is patch for one of the tests explaining exactly my problem. I'l look at it. Thank you. > BTW, it seems that one of the tests using trunk is broken. See: > > sqlobject/tests/test_boundattributes.py FAILED TO LOAD MODULE > > Probably a new regression or is it my fault ? No, test_boundattributes.py is really broken. I've reported this to Ian. Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |
From: Oleg B. <ph...@ph...> - 2006-01-09 14:12:33
|
Hello! On Thu, Jan 05, 2006 at 01:12:35PM -0200, Evandro Vale Miquelito wrote: > class DIEmployee(DIPerson): > position = StringCol() > > +DIEmployee.sqlmeta.cacheValues = False Please take a look at main.py, .addColumn(): if sqlmeta.cacheValues: getter = eval('lambda self: self._SO_loadValue(%s)' % repr(instanceName(name))) else: getter = eval('lambda self: self._SO_getValue(%s)' % repr(name)) setattr(soClass, rawGetterName(name), getter) See? The value of cacheValues is used to create getter during addColumn() but not later. Hence you shouldn't mess with cacheValues after the class creation. At least this is how I understand the code. The following test passed (shortened version just to show the idea): from sqlobject.inheritance import InheritableSQLObject, InheritableSQLMeta class DIEmployee(DIPerson): class sqlmeta(InheritableSQLMeta): cacheValues = False position = StringCol() Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |
From: Evandro V. M. <ev...@as...> - 2006-01-09 14:38:22
|
Hello Oleg ! > Please take a look at main.py, .addColumn(): > > if sqlmeta.cacheValues: > getter = eval('lambda self: self._SO_loadValue(%s)' % repr(instanceName(name))) > > else: > getter = eval('lambda self: self._SO_getValue(%s)' % repr(name)) > setattr(soClass, rawGetterName(name), getter) > > See? The value of cacheValues is used to create getter during > addColumn() but not later. Hence you shouldn't mess with cacheValues after > the class creation. At least this is how I understand the code. Ouch ! Now I see. And what about add some notes about this special behaviour of cacheValues in SQLObject documentation ? I think it could be very helpful for other developers. Thanks a lot again. -- Evandro Vale Miquelito : ev...@as... Async Open Source - Brazil | http://www.async.com.br |
From: Oleg B. <ph...@ph...> - 2006-01-09 14:49:07
|
On Mon, Jan 09, 2006 at 12:38:07PM -0200, Evandro Vale Miquelito wrote: > And what about add some notes about this special > behaviour of cacheValues in SQLObject documentation ? I think it could > be very helpful for other developers. I think the intention is that nobody should mess with sqlmeta after the class creation. Neither idName nor idType nor style etc should be changed. Columns and joins should be chnaged only with add/removeColumn/Join(). I am not sure about lazyUpdate. It seems it is allowed to be chnaged. That's not consistent with other sqlmeta attributes... Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |