Author: phd
Date: 2010-02-01 07:45:04 -0700 (Mon, 01 Feb 2010)
New Revision: 4090
Added:
SQLObject/trunk/sqlobject/tests/test_sqlmeta_idName.py
Modified:
SQLObject/trunk/docs/News.txt
SQLObject/trunk/sqlobject/main.py
SQLObject/trunk/sqlobject/tests/test_basic.py
Log:
Do not pollute the base sqlmeta class to allow Style to set idName.
Modified: SQLObject/trunk/docs/News.txt
===================================================================
--- SQLObject/trunk/docs/News.txt 2010-01-22 17:54:29 UTC (rev 4089)
+++ SQLObject/trunk/docs/News.txt 2010-02-01 14:45:04 UTC (rev 4090)
@@ -16,6 +16,13 @@
* Added TimedeltaCol; currently it's only implemented on PostgreSQL as an
INTERVAL type.
+Small Features
+--------------
+
+* Do not pollute the base sqlmeta class to allow Style to set idName. In
+ the case of inherited idName inherited value takes precedence; To allow
+ Style to set idName resets inherited idName to None.
+
SQLObject 0.12.1
================
Modified: SQLObject/trunk/sqlobject/main.py
===================================================================
--- SQLObject/trunk/sqlobject/main.py 2010-01-22 17:54:29 UTC (rev 4089)
+++ SQLObject/trunk/sqlobject/main.py 2010-02-01 14:45:04 UTC (rev 4090)
@@ -853,7 +853,8 @@
del values[key]
cls.sqlmeta = type('sqlmeta', (superclass,), values)
- cls.sqlmeta.setClass(cls)
+ if not is_base: # Do not pollute the base sqlmeta class
+ cls.sqlmeta.setClass(cls)
_SO_setupSqlmeta = classmethod(_SO_setupSqlmeta)
Modified: SQLObject/trunk/sqlobject/tests/test_basic.py
===================================================================
--- SQLObject/trunk/sqlobject/tests/test_basic.py 2010-01-22 17:54:29 UTC (rev 4089)
+++ SQLObject/trunk/sqlobject/tests/test_basic.py 2010-02-01 14:45:04 UTC (rev 4090)
@@ -291,29 +291,17 @@
else:
assert 0, "Expected an AttributeError"
-class myid_sqlmeta(sqlmeta):
- idName = "my_id"
-
class TestSO12(SQLObject):
- class sqlmeta(myid_sqlmeta):
- pass
name = StringCol()
-
-def test_sqlmeta_inherited_idName():
- setupClass(TestSO12)
- assert TestSO12.sqlmeta.idName == "my_id"
-
-class TestSO13(SQLObject):
- name = StringCol()
value = IntCol(defaultSQL='1')
def test_defaultSQL():
- setupClass(TestSO13)
- test = TestSO13(name="test")
+ setupClass(TestSO12)
+ test = TestSO12(name="test")
assert test.value == 1
def test_connection_override():
sqlhub.processConnection = connectionForURI('sqlite:///db1')
- class TestSO14(SQLObject):
+ class TestSO13(SQLObject):
_connection = connectionForURI('sqlite:///db2')
- assert TestSO14._connection.uri() == 'sqlite:///db2'
+ assert TestSO13._connection.uri() == 'sqlite:///db2'
Added: SQLObject/trunk/sqlobject/tests/test_sqlmeta_idName.py
===================================================================
--- SQLObject/trunk/sqlobject/tests/test_sqlmeta_idName.py (rev 0)
+++ SQLObject/trunk/sqlobject/tests/test_sqlmeta_idName.py 2010-02-01 14:45:04 UTC (rev 4090)
@@ -0,0 +1,43 @@
+from sqlobject import *
+from sqlobject.tests.dbtest import *
+
+class myid_sqlmeta(sqlmeta):
+ idName = "my_id"
+
+class TestSqlmeta1(SQLObject):
+ class sqlmeta(myid_sqlmeta):
+ pass
+
+class TestSqlmeta2(SQLObject):
+ class sqlmeta(sqlmeta):
+ style = MixedCaseStyle(longID=True)
+
+class TestSqlmeta3(SQLObject):
+ class sqlmeta(myid_sqlmeta):
+ style = MixedCaseStyle(longID=True)
+
+class TestSqlmeta4(SQLObject):
+ class sqlmeta(myid_sqlmeta):
+ idName = None
+ style = MixedCaseStyle(longID=True)
+
+class longid_sqlmeta(sqlmeta):
+ idName = "my_id"
+ style = MixedCaseStyle(longID=True)
+
+class TestSqlmeta5(SQLObject):
+ class sqlmeta(longid_sqlmeta):
+ pass
+
+class TestSqlmeta6(SQLObject):
+ class sqlmeta(longid_sqlmeta):
+ idName = None
+
+def test_sqlmeta_inherited_idName():
+ setupClass([TestSqlmeta1, TestSqlmeta2])
+ assert TestSqlmeta1.sqlmeta.idName == "my_id"
+ assert TestSqlmeta2.sqlmeta.idName == "TestSqlmeta2ID"
+ assert TestSqlmeta3.sqlmeta.idName == "my_id"
+ assert TestSqlmeta4.sqlmeta.idName == "TestSqlmeta4ID"
+ assert TestSqlmeta5.sqlmeta.idName == "my_id"
+ assert TestSqlmeta6.sqlmeta.idName == "TestSqlmeta6ID"
|