Update of /cvsroot/webware/Webware/MiddleKit/Run
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2777/Run
Modified Files:
MiddleObject.py ObjectStore.py
Log Message:
When an object is deleted, automatically remove it from any list attributes
that other objects may have.
Index: MiddleObject.py
===================================================================
RCS file: /cvsroot/webware/Webware/MiddleKit/Run/MiddleObject.py,v
retrieving revision 1.28
retrieving revision 1.29
diff -C2 -d -r1.28 -r1.29
*** MiddleObject.py 24 Feb 2004 02:04:13 -0000 1.28
--- MiddleObject.py 9 Mar 2004 21:03:49 -0000 1.29
***************
*** 5,9 ****
from MiddleKit import StringTypes
from MiddleKit.Core.ObjRefAttr import ObjRefAttr
!
class MiddleObject(NamedValueAccess):
--- 5,9 ----
from MiddleKit import StringTypes
from MiddleKit.Core.ObjRefAttr import ObjRefAttr
! from MiddleKit.Core.ListAttr import ListAttr
class MiddleObject(NamedValueAccess):
***************
*** 186,189 ****
--- 186,218 ----
return allAttrs
+ def removeObjectFromListAttrs(self, object):
+ """
+ Removes object from any list attributes that this instance might have.
+ This is used if the object is deleted, so we don't have dangling references.
+ """
+ for attr in self.klass().allAttrs():
+ if isinstance( attr, ListAttr ):
+ listName = '_' + attr.name()
+ list = getattr( self, listName )
+ if list is not None and object in list:
+ delattr(self,listName)
+ setattr(self,listName,None)
+
+ def updateReferencingListAttrs(self):
+ """
+ Checks through all object references, and asks each referenced
+ object to remove us from any list attributes that they might have.
+ """
+ for attr in self.klass().allAttrs():
+ if isinstance( attr, ObjRefAttr ):
+ value = getattr( self, '_' + attr.name() )
+ if value is not None:
+ if type(value) is types.InstanceType:
+ value.removeObjectFromListAttrs(self)
+ elif type(value) is types.LongType:
+ obj = self.store().objRefInMem(value)
+ if obj:
+ obj.removeObjectFromListAttrs(self)
+
def referencingObjectsAndAttrs(self):
"""
Index: ObjectStore.py
===================================================================
RCS file: /cvsroot/webware/Webware/MiddleKit/Run/ObjectStore.py,v
retrieving revision 1.30
retrieving revision 1.31
diff -C2 -d -r1.30 -r1.31
*** ObjectStore.py 24 Feb 2004 02:04:13 -0000 1.30
--- ObjectStore.py 9 Mar 2004 21:03:49 -0000 1.31
***************
*** 167,170 ****
--- 167,171 ----
# remove deleted objects from main list of objects
for obj in objectsToDel:
+ obj.updateReferencingListAttrs()
del self._objects[obj.key()]
|