[SQL-CVS] r988 - in SQLObject/trunk/sqlobject: . tests
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
From: <sub...@co...> - 2005-09-13 16:31:27
|
Author: phd Date: 2005-09-13 16:31:22 +0000 (Tue, 13 Sep 2005) New Revision: 988 Modified: SQLObject/trunk/sqlobject/main.py SQLObject/trunk/sqlobject/tests/test_joins.py Log: Fixed a problem when Table(foreign_key=value) wouldn't call the foreign_key setter. Added a test. Modified: SQLObject/trunk/sqlobject/main.py =================================================================== --- SQLObject/trunk/sqlobject/main.py 2005-09-13 15:31:09 UTC (rev 987) +++ SQLObject/trunk/sqlobject/main.py 2005-09-13 16:31:22 UTC (rev 988) @@ -1188,15 +1188,9 @@ # passed: for column in self.sqlmeta.columnList: - # If a foreign key is given, we get the ID of the object - # and put that in instead - if kw.has_key(column.foreignName): - kw[column.name] = getID(kw[column.foreignName]) - del kw[column.foreignName] - # Then we check if the column wasn't passed in, and # if not we try to get the default. - if not kw.has_key(column.name): + if not kw.has_key(column.name) and not kw.has_key(column.foreignName): default = column.default # If we don't get it, it's an error: Modified: SQLObject/trunk/sqlobject/tests/test_joins.py =================================================================== --- SQLObject/trunk/sqlobject/tests/test_joins.py 2005-09-13 15:31:09 UTC (rev 987) +++ SQLObject/trunk/sqlobject/tests/test_joins.py 2005-09-13 16:31:22 UTC (rev 988) @@ -61,6 +61,7 @@ assert hasattr(ExplicitJoiningSO, 'foo') assert not hasattr(ExplicitJoiningSO, 'bars') + class PersonJoiner2(SQLObject): name = StringCol('name', length=40, alternateID=True) @@ -105,3 +106,44 @@ assert ([i.zip for i in p1.addressJoiner2s] == ['33333', '22222', '11111']) + +_personJoiner3_getters = [] +_personJoiner3_setters = [] + +class PersonJoiner3(SQLObject): + + name = StringCol('name', length=40, alternateID=True) + addressJoiner3s = MultipleJoin('AddressJoiner3') + +class AddressJoiner3(SQLObject): + + zip = StringCol(length=5) + personJoiner3 = ForeignKey('PersonJoiner3') + + def _get_personJoiner3(self): + value = self._SO_get_personJoiner3() + _personJoiner3_getters.append((self, value)) + return value + + def _set_personJoiner3(self, value): + self._SO_set_personJoiner3(value) + _personJoiner3_setters.append((self, value)) + +class TestJoin3: + + def setup_method(self, meth): + setupClass([PersonJoiner3, AddressJoiner3]) + p1 = PersonJoiner3(name='bob') + p2 = PersonJoiner3(name='sally') + for z in ['11111', '22222', '33333']: + a = AddressJoiner3(zip=z, personJoiner3=p1) + AddressJoiner3(zip='00000', personJoiner3=p2) + + def test_accessors(self): + assert len(_personJoiner3_getters) == 0 + assert len(_personJoiner3_setters) == 4 + bob = PersonJoiner3.byName('bob') + for addressJoiner3 in bob.addressJoiner3s: + addressJoiner3.personJoiner3 + assert len(_personJoiner3_getters) == 3 + assert len(_personJoiner3_setters) == 4 |