[SQL-CVS] r897 - in trunk/SQLObject/sqlobject: . tests
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
From: <sub...@co...> - 2005-08-05 22:08:08
|
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) |