Author: phd
Date: 2006-02-17 08:51:50 -0700 (Fri, 17 Feb 2006)
New Revision: 1608
Modified:
home/phd/SQLObject/paramstyles/sqlobject/col.py
home/phd/SQLObject/paramstyles/sqlobject/joins.py
home/phd/SQLObject/paramstyles/sqlobject/main.py
home/phd/SQLObject/paramstyles/sqlobject/styles.py
home/phd/SQLObject/paramstyles/sqlobject/tests/test_auto.py
home/phd/SQLObject/paramstyles/sqlobject/tests/test_auto_old.py
Log:
Merged patches from the revisions 1606:1606 from the trunk: applied the patch 1353728: define foreign keys in Style.
Modified: home/phd/SQLObject/paramstyles/sqlobject/col.py
===================================================================
--- home/phd/SQLObject/paramstyles/sqlobject/col.py 2006-02-17 15:50:51 UTC (rev 1607)
+++ home/phd/SQLObject/paramstyles/sqlobject/col.py 2006-02-17 15:51:50 UTC (rev 1608)
@@ -176,14 +176,18 @@
self._default = default
self.customSQLType = sqlType
+ # deal with foreign keys
self.foreignKey = foreignKey
if self.foreignKey:
- #assert self.name.upper().endswith('ID'), "All foreign key columns must end with 'ID' (%s)" % repr(self.name)
- if not self.name.upper().endswith('ID'):
+ if origName is not None:
+ idname = soClass.sqlmeta.style.instanceAttrToIDAttr(origName)
+ else:
+ idname = soClass.sqlmeta.style.instanceAttrToIDAttr(name)
+ if self.name != idname:
self.foreignName = self.name
- self.name = self.name + "ID"
+ self.name = idname
else:
- self.foreignName = self.name[:-2]
+ self.foreignName = soClass.sqlmeta.style.instanceIDAttrToAttr(self.name)
else:
self.foreignName = None
@@ -261,8 +265,7 @@
default = property(_get_default, None, None)
def _get_joinName(self):
- assert self.name[-2:] == 'ID'
- return self.name[:-2]
+ return self.soClass.sqlmeta.style.instanceIDAttrToAttr(self.name)
joinName = property(_get_joinName, None, None)
def __repr__(self):
@@ -719,8 +722,7 @@
kw['name'] = style.instanceAttrToIDAttr(style.pythonClassToAttr(foreignKey))
else:
kw['origName'] = kw['name']
- if not kw['name'].upper().endswith('ID'):
- kw['name'] = style.instanceAttrToIDAttr(kw['name'])
+ kw['name'] = style.instanceAttrToIDAttr(kw['name'])
super(SOForeignKey, self).__init__(**kw)
def postgresCreateSQL(self):
Modified: home/phd/SQLObject/paramstyles/sqlobject/joins.py
===================================================================
--- home/phd/SQLObject/paramstyles/sqlobject/joins.py 2006-02-17 15:50:51 UTC (rev 1607)
+++ home/phd/SQLObject/paramstyles/sqlobject/joins.py 2006-02-17 15:51:50 UTC (rev 1608)
@@ -275,12 +275,8 @@
if not self.makeDefault:
return None
else:
- kw = {pythonColumn[:-2]: inst} # skipping the ID (from foreignkeyID)
+ kw = {self.soClass.sqlmeta.style.instanceIDAttrToAttr(pythonColumn): inst}
return self.otherClass(**kw) # instanciating the otherClass with all
- # values to their defaults, except the foreign key
- # TODO I don't think this is the best way to know the column as foreignKey
- # reather than foreignKeyID, but I don't found a sqlmeta.style function
- # to do the work, if there isn't such function, I must create it.
else:
return results[0]
Modified: home/phd/SQLObject/paramstyles/sqlobject/main.py
===================================================================
--- home/phd/SQLObject/paramstyles/sqlobject/main.py 2006-02-17 15:50:51 UTC (rev 1607)
+++ home/phd/SQLObject/paramstyles/sqlobject/main.py 2006-02-17 15:51:50 UTC (rev 1608)
@@ -379,10 +379,10 @@
# SQLObject instance.
if column.foreignKey:
- # We go through the standard _SO_get_columnName
- # deal, except chopping off the "ID" ending since
+ # We go through the standard _SO_get_columnName deal
# we're giving the object, not the ID of the
# object this time:
+ origName = column.origName
if sqlmeta.cacheValues:
# self._SO_class_className is a reference
# to the class in question.
@@ -390,26 +390,21 @@
else:
# Same non-caching version as above.
getter = eval('lambda self: self._SO_foreignKey(self._SO_getValue(%s), self._SO_class_%s)' % (repr(name), column.foreignKey))
- if column.origName.upper().endswith('ID'):
- origName = column.origName[:-2]
- else:
- origName = column.origName
setattr(soClass, rawGetterName(origName), getter)
# And we set the _get_columnName version
- # (sans ID ending)
- if not hasattr(soClass, getterName(name)[:-2]):
- setattr(soClass, getterName(name)[:-2], getter)
- sqlmeta._plainForeignGetters[name[:-2]] = 1
+ if not hasattr(soClass, getterName(origName)):
+ setattr(soClass, getterName(origName), getter)
+ sqlmeta._plainForeignGetters[origName] = 1
if not column.immutable:
# The setter just gets the ID of the object,
# and then sets the real column.
setter = eval('lambda self, val: setattr(self, %s, self._SO_getID(val))' % (repr(name)))
- setattr(soClass, rawSetterName(name)[:-2], setter)
- if not hasattr(soClass, setterName(name)[:-2]):
- setattr(soClass, setterName(name)[:-2], setter)
- sqlmeta._plainForeignSetters[name[:-2]] = 1
+ setattr(soClass, rawSetterName(origName), setter)
+ if not hasattr(soClass, setterName(origName)):
+ setattr(soClass, setterName(origName), setter)
+ sqlmeta._plainForeignSetters[origName] = 1
classregistry.registry(sqlmeta.registry).addClassCallback(
column.foreignKey,
@@ -468,12 +463,12 @@
if sqlmeta._plainSetters.has_key(name):
delattr(soClass, setterName(name))
if column.foreignKey:
- delattr(soClass, rawGetterName(name)[:-2])
- if sqlmeta._plainForeignGetters.has_key(name[:-2]):
- delattr(soClass, getterName(name)[:-2])
- delattr(soClass, rawSetterName(name)[:-2])
- if sqlmeta._plainForeignSetters.has_key(name[:-2]):
- delattr(soClass, setterName(name)[:-2])
+ delattr(soClass, rawGetterName(soClass.sqlmeta.style.instanceIDAttrToAttr(name)))
+ if sqlmeta._plainForeignGetters.has_key(name):
+ delattr(soClass, getterName(name))
+ delattr(soClass, rawSetterName(soClass.sqlmeta.style.instanceIDAttrToAttr(name)))
+ if sqlmeta._plainForeignSetters.has_key(name):
+ delattr(soClass, setterName(name))
if column.alternateMethodName:
delattr(soClass, column.alternateMethodName)
Modified: home/phd/SQLObject/paramstyles/sqlobject/styles.py
===================================================================
--- home/phd/SQLObject/paramstyles/sqlobject/styles.py 2006-02-17 15:50:51 UTC (rev 1607)
+++ home/phd/SQLObject/paramstyles/sqlobject/styles.py 2006-02-17 15:51:50 UTC (rev 1608)
@@ -54,10 +54,11 @@
return lowerword(className)
def instanceAttrToIDAttr(self, attr):
- # @@: Right now, because of how names are created for foreign
- # keys, you can't really change this style.
return attr + "ID"
+ def instanceIDAttrToAttr(self, attr):
+ return attr[:-2]
+
def tableReference(self, table):
return table + "_id"
Modified: home/phd/SQLObject/paramstyles/sqlobject/tests/test_auto.py
===================================================================
--- home/phd/SQLObject/paramstyles/sqlobject/tests/test_auto.py 2006-02-17 15:50:51 UTC (rev 1607)
+++ home/phd/SQLObject/paramstyles/sqlobject/tests/test_auto.py 2006-02-17 15:51:50 UTC (rev 1608)
@@ -47,7 +47,7 @@
Person.sqlmeta.delColumn(nickname, changeSchema=True)
def test_dynamicJoin(self):
- col = KeyCol('personID', foreignKey='Person')
+ col = KeyCol('person', foreignKey='Person')
Phone.sqlmeta.addColumn(col, changeSchema=True)
join = MultipleJoin('Phone')
Person.sqlmeta.addJoin(join)
Modified: home/phd/SQLObject/paramstyles/sqlobject/tests/test_auto_old.py
===================================================================
--- home/phd/SQLObject/paramstyles/sqlobject/tests/test_auto_old.py 2006-02-17 15:50:51 UTC (rev 1607)
+++ home/phd/SQLObject/paramstyles/sqlobject/tests/test_auto_old.py 2006-02-17 15:51:50 UTC (rev 1608)
@@ -49,7 +49,7 @@
OldPerson.delColumn(nickname, changeSchema=True)
def test_dynamicJoin(self):
- col = KeyCol('oldPersonID', foreignKey='OldPerson')
+ col = KeyCol('oldPerson', foreignKey='OldPerson')
OldPhone.addColumn(col, changeSchema=True)
join = MultipleJoin('OldPhone')
OldPerson.addJoin(join)
|