Author: test
Date: 2005-08-05 22:07:46 +0000 (Fri, 05 Aug 2005)
New Revision: 897
Modified:
trunk/SQLObject/sqlobject/col.py
trunk/SQLObject/sqlobject/tests/test_basic.py
Log:
Allow attributes to be set on Col object, then propogated to the SOCol objects
Modified: trunk/SQLObject/sqlobject/col.py
===================================================================
--- trunk/SQLObject/sqlobject/col.py 2005-08-05 21:14:27 UTC (rev 896)
+++ trunk/SQLObject/sqlobject/col.py 2005-08-05 22:07:46 UTC (rev 897)
@@ -121,7 +121,8 @@
lazy=False,
noCache=False,
forceDBName=False,
- origName=None):
+ origName=None,
+ extra_vars=None):
# This isn't strictly true, since we *could* use backquotes or
# " or something (database-specific) around column names, but
@@ -213,6 +214,10 @@
# and append an ID
self.origName = origName or name
+ if extra_vars:
+ for name, value in extra_vars.items():
+ setattr(self, name, value)
+
def _set_validator(self, value):
self._validator = value
if self._validator:
@@ -363,16 +368,16 @@
baseClass = SOCol
def __init__(self, name=None, **kw):
- self._name = name
- kw['columnDef'] = self
- self.kw = kw
- self.creationOrder = creationOrder.next()
+ self.__dict__['_name'] = name
+ self.__dict__['_kw'] = kw
+ self.__dict__['creationOrder'] = creationOrder.next()
+ self.__dict__['_extra_vars'] = {}
def _set_name(self, value):
assert self._name is None or self._name == value, (
"You cannot change a name after it has already been set "
"(from %s to %s)" % (self.name, value))
- self._name = value
+ self.__dict__['_name'] = value
def _get_name(self):
return self._name
@@ -382,8 +387,16 @@
def withClass(self, soClass):
return self.baseClass(soClass=soClass, name=self._name,
creationOrder=self.creationOrder,
- **self.kw)
+ columnDef=self,
+ extra_vars=self._extra_vars,
+ **self._kw)
+ def __setattr__(self, var, value):
+ if var == 'name':
+ super(Col, self).__setattr__(var, value)
+ return
+ self._extra_vars[var] = value
+
def __repr__(self):
return '<%s %s %s>' % (
self.__class__.__name__, hex(abs(id(self)))[2:],
@@ -848,7 +861,8 @@
def __init__(self, **kw):
datetimeFormat = popKey(kw, 'datetimeFormat')
- if datetimeFormat: self.datetimeFormat = datetimeFormat
+ if datetimeFormat:
+ self.datetimeFormat = datetimeFormat
SOCol.__init__(self, **kw)
def createValidators(self):
Modified: trunk/SQLObject/sqlobject/tests/test_basic.py
===================================================================
--- trunk/SQLObject/sqlobject/tests/test_basic.py 2005-08-05 21:14:27 UTC (rev 896)
+++ trunk/SQLObject/sqlobject/tests/test_basic.py 2005-08-05 22:07:46 UTC (rev 897)
@@ -4,6 +4,8 @@
class TestSO1(SQLObject):
name = StringCol(length=50, dbName='name_col')
+ name.title = 'Your Name'
+ name.foobar = 1
passwd = StringCol(length=10)
class sqlmeta:
@@ -50,6 +52,13 @@
bob.set(name='joebob', passwd='testtest')
assert bob.name == 'joebob'
+def test_extra_vars():
+ setupGetters(TestSO1)
+ col = TestSO1.sqlmeta.columns['name']
+ assert col.title == 'Your Name'
+ assert col.foobar == 1
+ assert getattr(TestSO1.sqlmeta.columns['passwd'], 'title', None) is None
+
class TestSO2(SQLObject):
name = StringCol(length=50, dbName='name_col')
passwd = StringCol(length=10)
|