Skip to content

Commit ec2588d

Browse files
committed
Do not pollute the base sqlmeta class to allow Style to set idName.
git-svn-id: http://svn.colorstudy.com/SQLObject/trunk@4090 95a46c32-92d2-0310-94a5-8d71aeb3d4b3
1 parent 30eed8b commit ec2588d

4 files changed

Lines changed: 56 additions & 17 deletions

File tree

docs/News.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,13 @@ Features & Interface
1616
* Added TimedeltaCol; currently it's only implemented on PostgreSQL as an
1717
INTERVAL type.
1818

19+
Small Features
20+
--------------
21+
22+
* Do not pollute the base sqlmeta class to allow Style to set idName. In
23+
the case of inherited idName inherited value takes precedence; To allow
24+
Style to set idName resets inherited idName to None.
25+
1926
SQLObject 0.12.1
2027
================
2128

sqlobject/main.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -853,7 +853,8 @@ def _SO_setupSqlmeta(cls, new_attrs, is_base):
853853
del values[key]
854854
cls.sqlmeta = type('sqlmeta', (superclass,), values)
855855

856-
cls.sqlmeta.setClass(cls)
856+
if not is_base: # Do not pollute the base sqlmeta class
857+
cls.sqlmeta.setClass(cls)
857858

858859
_SO_setupSqlmeta = classmethod(_SO_setupSqlmeta)
859860

sqlobject/tests/test_basic.py

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -291,29 +291,17 @@ def test_nonexisting_attr():
291291
else:
292292
assert 0, "Expected an AttributeError"
293293

294-
class myid_sqlmeta(sqlmeta):
295-
idName = "my_id"
296-
297294
class TestSO12(SQLObject):
298-
class sqlmeta(myid_sqlmeta):
299-
pass
300-
name = StringCol()
301-
302-
def test_sqlmeta_inherited_idName():
303-
setupClass(TestSO12)
304-
assert TestSO12.sqlmeta.idName == "my_id"
305-
306-
class TestSO13(SQLObject):
307295
name = StringCol()
308296
value = IntCol(defaultSQL='1')
309297

310298
def test_defaultSQL():
311-
setupClass(TestSO13)
312-
test = TestSO13(name="test")
299+
setupClass(TestSO12)
300+
test = TestSO12(name="test")
313301
assert test.value == 1
314302

315303
def test_connection_override():
316304
sqlhub.processConnection = connectionForURI('sqlite:///db1')
317-
class TestSO14(SQLObject):
305+
class TestSO13(SQLObject):
318306
_connection = connectionForURI('sqlite:///db2')
319-
assert TestSO14._connection.uri() == 'sqlite:///db2'
307+
assert TestSO13._connection.uri() == 'sqlite:///db2'
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
from sqlobject import *
2+
from sqlobject.tests.dbtest import *
3+
4+
class myid_sqlmeta(sqlmeta):
5+
idName = "my_id"
6+
7+
class TestSqlmeta1(SQLObject):
8+
class sqlmeta(myid_sqlmeta):
9+
pass
10+
11+
class TestSqlmeta2(SQLObject):
12+
class sqlmeta(sqlmeta):
13+
style = MixedCaseStyle(longID=True)
14+
15+
class TestSqlmeta3(SQLObject):
16+
class sqlmeta(myid_sqlmeta):
17+
style = MixedCaseStyle(longID=True)
18+
19+
class TestSqlmeta4(SQLObject):
20+
class sqlmeta(myid_sqlmeta):
21+
idName = None
22+
style = MixedCaseStyle(longID=True)
23+
24+
class longid_sqlmeta(sqlmeta):
25+
idName = "my_id"
26+
style = MixedCaseStyle(longID=True)
27+
28+
class TestSqlmeta5(SQLObject):
29+
class sqlmeta(longid_sqlmeta):
30+
pass
31+
32+
class TestSqlmeta6(SQLObject):
33+
class sqlmeta(longid_sqlmeta):
34+
idName = None
35+
36+
def test_sqlmeta_inherited_idName():
37+
setupClass([TestSqlmeta1, TestSqlmeta2])
38+
assert TestSqlmeta1.sqlmeta.idName == "my_id"
39+
assert TestSqlmeta2.sqlmeta.idName == "TestSqlmeta2ID"
40+
assert TestSqlmeta3.sqlmeta.idName == "my_id"
41+
assert TestSqlmeta4.sqlmeta.idName == "TestSqlmeta4ID"
42+
assert TestSqlmeta5.sqlmeta.idName == "my_id"
43+
assert TestSqlmeta6.sqlmeta.idName == "TestSqlmeta6ID"

0 commit comments

Comments
 (0)