Update of /cvsroot/sqlobject/SQLObject/SQLObject
In directory sc8-pr-cvs1:/tmp/cvs-serv10132/SQLObject
Modified Files:
Converters.py SQLObject.py
Log Message:
Added expire and sync methods
Index: Converters.py
===================================================================
RCS file: /cvsroot/sqlobject/SQLObject/SQLObject/Converters.py,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** Converters.py 23 Aug 2003 18:12:43 -0000 1.3
--- Converters.py 7 Sep 2003 07:05:26 -0000 1.4
***************
*** 24,28 ****
sqlStringReplace = [
('\\', '\\\\'),
! ('\'', '\\\''),
('\000', '\\0'),
('\b', '\\b'),
--- 24,28 ----
sqlStringReplace = [
('\\', '\\\\'),
! ("'", "''"),
('\000', '\\0'),
('\b', '\\b'),
Index: SQLObject.py
===================================================================
RCS file: /cvsroot/sqlobject/SQLObject/SQLObject/SQLObject.py,v
retrieving revision 1.52
retrieving revision 1.53
diff -C2 -d -r1.52 -r1.53
*** SQLObject.py 7 Sep 2003 00:49:03 -0000 1.52
--- SQLObject.py 7 Sep 2003 07:05:26 -0000 1.53
***************
*** 66,82 ****
def setNeedSet():
global needSet
- for registryName, needList in needSet.items():
- newNeedList = []
- for needClass, setCls in needList:
- if classRegistry.get(registryName, {}).has_key(setCls):
- setattr(findClass(needClass, registry=registryName),
- '_SO_class_%s' % setCls,
- findClass(setCls, registry=registryName))
- else:
- newNeedList.append((needClass, setCls))
- needSet[registryName] = newNeedList
-
- def setNeedSet():
- global needSet
for registryName, needClassDict in needSet.items():
newNeedClassDict = {}
--- 66,69 ----
***************
*** 327,330 ****
--- 314,321 ----
class CreateNewSQLObject:
+ """
+ Dummy singleton to use in place of an ID, to signal we want
+ a new object.
+ """
pass
***************
*** 374,377 ****
--- 365,372 ----
_registry = None
+ # Default is false, but we set it to true for the *instance*
+ # when necessary: (bad clever? maybe)
+ _expired = False
+
def __new__(cls, id, connection=None, selectResults=None):
***************
*** 435,439 ****
# We create a method here, which is just a function
# that takes "self" as the first argument.
! getter = eval('lambda self: self.%s' % instanceName(name))
else:
# If we aren't caching values, we just call the
--- 430,434 ----
# We create a method here, which is just a function
# that takes "self" as the first argument.
! getter = eval('lambda self: self._SO_loadValue(%s)' % repr(instanceName(name)))
else:
# If we aren't caching values, we just call the
***************
*** 664,669 ****
self._SO_perConnection = True
- dbNames = [col.dbName for col in self._SO_columns]
if not selectResults:
selectResults = self._connection._SO_selectOne(self, dbNames)
if not selectResults:
--- 659,664 ----
self._SO_perConnection = True
if not selectResults:
+ dbNames = [col.dbName for col in self._SO_columns]
selectResults = self._connection._SO_selectOne(self, dbNames)
if not selectResults:
***************
*** 671,674 ****
--- 666,712 ----
self._SO_selectInit(selectResults)
+ def _SO_loadValue(self, attrName):
+ try:
+ return getattr(self, attrName)
+ except AttributeError:
+ self._SO_writeLock.acquire()
+ try:
+ result = getattr(self, attrName)
+ except AttributeError:
+ pass
+ else:
+ self._SO_writeLock.release()
+ return result
+ self._expired = False
+ dbNames = [col.dbName for col in self._SO_columns]
+ selectResults = self._connection._SO_selectOne(self, dbNames)
+ if not selectResults:
+ raise SQLObjectNotFound, "The object %s by the ID %s has been deleted" % (self.__class__.__name__, self.id)
+ self._SO_selectInit(selectResults)
+ result = getattr(self, attrName)
+ self._SO_writeLock.release()
+ return result
+
+ def sync(self):
+ self._SO_writeLock.acquire()
+ dbNames = [col.dbName for col in self._SO_columns]
+ selectResults = self._connection._SO_selectOne(self, dbNames)
+ if not selectResults:
+ raise SQLObjectNotFound, "The object %s by the ID %s has been deleted" % (self.__class__.__name__, self.id)
+ self._SO_selectInit(selectResults)
+ self._expired = False
+ self._SO_writeLock.release()
+
+ def expire(self):
+ if self._expired:
+ return
+ self._SO_writeLock.acquire()
+ if self._expired:
+ self._SO_writeLock.release()
+ return
+ for column in self._SO_columns:
+ delattr(self, instanceName(column.name))
+ self._expired = True
+ self._SO_writeLock.release()
def _SO_setValue(self, name, value):
|