Author: phd
Date: 2006-10-30 12:47:57 -0700 (Mon, 30 Oct 2006)
New Revision: 2054
Added:
home/phd/SQLObject/paramstyles/sqlobject/inheritance/tests/test_foreignKey.py
Modified:
home/phd/SQLObject/paramstyles/sqlobject/inheritance/__init__.py
home/phd/SQLObject/paramstyles/sqlobject/inheritance/tests/test_inherited_foreignKey.py
Log:
Merged patches from the revisions 2048:2053 from the trunk
Modified: home/phd/SQLObject/paramstyles/sqlobject/inheritance/__init__.py
===================================================================
--- home/phd/SQLObject/paramstyles/sqlobject/inheritance/__init__.py 2006-10-30 19:45:58 UTC (rev 2053)
+++ home/phd/SQLObject/paramstyles/sqlobject/inheritance/__init__.py 2006-10-30 19:47:57 UTC (rev 2054)
@@ -308,7 +308,8 @@
# create the current subclass otherwise we will leave
# the database in an inconsistent state.
for col in self.sqlmeta.columnList:
- if col._default == sqlbuilder.NoDefault and col.name not in kw:
+ if (col._default == sqlbuilder.NoDefault) and \
+ (col.name not in kw) and (col.foreignName not in kw):
raise TypeError, "%s() did not get expected keyword argument %s" % (self.__class__.__name__, col.name)
parent_kw['childName'] = self.sqlmeta.childName
Copied: home/phd/SQLObject/paramstyles/sqlobject/inheritance/tests/test_foreignKey.py (from rev 2053, SQLObject/trunk/sqlobject/inheritance/tests/test_foreignKey.py)
===================================================================
--- home/phd/SQLObject/paramstyles/sqlobject/inheritance/tests/test_foreignKey.py (rev 0)
+++ home/phd/SQLObject/paramstyles/sqlobject/inheritance/tests/test_foreignKey.py 2006-10-30 19:47:57 UTC (rev 2054)
@@ -0,0 +1,85 @@
+from sqlobject import *
+from sqlobject.tests.dbtest import *
+from sqlobject.inheritance import InheritableSQLObject
+
+
+class Note(SQLObject):
+ text = StringCol()
+
+class PersonWithNotes(InheritableSQLObject):
+ firstName = StringCol()
+ lastName = StringCol()
+ note = ForeignKey("Note", default=None)
+
+class Paper(SQLObject):
+ content = StringCol()
+
+class EmployeeWithNotes(PersonWithNotes):
+ _inheritable = False
+ paper = ForeignKey("Paper", default=None)
+
+def test_foreignKey():
+ setupClass([Note, PersonWithNotes, Paper, EmployeeWithNotes])
+
+ note = Note(text="person")
+ PersonWithNotes(firstName='Oneof', lastName='Authors', note=note)
+ note = Note(text="employee")
+ EmployeeWithNotes(firstName='Project', lastName='Leader', note=note)
+
+ paper = Paper(content="secret")
+ EmployeeWithNotes(firstName='Senior', lastName='Clerk', paper=paper)
+ PersonWithNotes(firstName='Some', lastName='Person')
+
+
+ person = PersonWithNotes.get(1)
+ assert isinstance(person, PersonWithNotes) and not isinstance(person, EmployeeWithNotes)
+ assert person.note.text == "person"
+
+ employee = EmployeeWithNotes.get(2)
+ assert isinstance(employee, EmployeeWithNotes)
+ assert employee.note.text == "employee"
+ save_employee = employee
+
+ persons = PersonWithNotes.select(PersonWithNotes.q.noteID <> None)
+ assert persons.count() == 2
+
+ persons = PersonWithNotes.selectBy(noteID=person.note.id)
+ assert persons.count() == 1
+
+ employee = EmployeeWithNotes.select(PersonWithNotes.q.noteID <> None)
+ assert employee.count() == 1
+
+ persons = PersonWithNotes.selectBy(noteID=person.note.id)
+ assert persons.count() == 1
+
+ persons = PersonWithNotes.selectBy(note=person.note)
+ assert persons.count() == 1
+
+ persons = PersonWithNotes.selectBy(note=None)
+ assert persons.count() == 2
+
+ employee = EmployeeWithNotes.selectBy(paperID=None)
+ assert employee.count() == 1
+
+ employee = EmployeeWithNotes.selectBy(paper=None)
+ assert employee.count() == 1
+
+ employee = EmployeeWithNotes.selectBy(note=save_employee.note,
+ paper=save_employee.paper)
+ assert employee.count() == 1
+
+ employee = EmployeeWithNotes.selectBy()
+ assert employee.count() == 2
+
+
+class TestInheritableBase(InheritableSQLObject):
+ pass
+
+class TestInheritableForeignKey(TestInheritableBase):
+ base = ForeignKey("TestInheritableBase")
+
+def test_foreignKey2():
+ setupClass([TestInheritableBase, TestInheritableForeignKey])
+
+ test = TestInheritableBase()
+ object = TestInheritableForeignKey(base=test)
Modified: home/phd/SQLObject/paramstyles/sqlobject/inheritance/tests/test_inherited_foreignKey.py
===================================================================
--- home/phd/SQLObject/paramstyles/sqlobject/inheritance/tests/test_inherited_foreignKey.py 2006-10-30 19:45:58 UTC (rev 2053)
+++ home/phd/SQLObject/paramstyles/sqlobject/inheritance/tests/test_inherited_foreignKey.py 2006-10-30 19:47:57 UTC (rev 2054)
@@ -18,11 +18,8 @@
_inheritable = False
paper = ForeignKey("Paper", default=None)
-def setup():
- setupClass(Note)
- setupClass(PersonWithNotes)
- setupClass(Paper)
- setupClass(EmployeeWithNotes)
+def test_foreignKey():
+ setupClass([Note, PersonWithNotes, Paper, EmployeeWithNotes])
note = Note(text="person")
PersonWithNotes(firstName='Oneof', lastName='Authors', note=note)
@@ -33,8 +30,6 @@
EmployeeWithNotes(firstName='Senior', lastName='Clerk', paper=paper)
PersonWithNotes(firstName='Some', lastName='Person')
-def test_inheritance():
- setup()
person = PersonWithNotes.get(1)
assert isinstance(person, PersonWithNotes) and not isinstance(person, EmployeeWithNotes)
@@ -75,3 +70,16 @@
employee = EmployeeWithNotes.selectBy()
assert employee.count() == 2
+
+
+class TestInheritableBase(InheritableSQLObject):
+ pass
+
+class TestInheritableForeignKey(TestInheritableBase):
+ base = ForeignKey("TestInheritableBase")
+
+def test_foreignKey2():
+ setupClass([TestInheritableBase, TestInheritableForeignKey])
+
+ test = TestInheritableBase()
+ object = TestInheritableForeignKey(base=test)
|