Files
wxWidgets/wxPython/samples/ide/activegrid/util/dependencymgr.py
2005-04-08 22:54:02 +00:00

146 lines
4.5 KiB
Python

#----------------------------------------------------------------------------
# Name: dependencymgr.py
# Purpose: Dependency Manager
#
# Author: Jeff Norton
#
# Created: 01/28/05
# CVS-ID: $Id$
# Copyright: (c) 2004-2005 ActiveGrid, Inc.
#----------------------------------------------------------------------------
DM_NO_ID = 0
DM_ID_ATTR = "_DependencyMgr__ID"
##class ManageableObject(object):
##
## def __init__(self):
## self.__id = DM_NO_ID
##
## def __repr__(self):
## return "<ManageableObject id = %s>" % self.__id
##
## def __getID(self):
## return self.__id
##
## def __setID(self, value):
## if (self.__id != DM_NO_ID):
## raise DependencyMgrException("Cannot set the dependency ID on object %s to \"%s\" because it already has one (\"%s\")." % (repr(self), value, self.__id))
## self.__id = value
##
## _DependencyMgr__ID = property(__getID, __setID)
class DependencyMgr(object):
def __init__(self):
self.clear()
def clear(self):
self.__dependencies = {}
self.__lastID = DM_NO_ID
def addDependency(self, parent, child):
pid = self._initObjectID(parent)
try:
parentCollection = self.__dependencies[pid]
except KeyError:
parentCollection = self._newDependencyCollection()
self.__dependencies[pid] = parentCollection
if (child not in parentCollection):
parentCollection.append(child)
def removeDependency(self, parent, child):
pid = self._getObjectID(parent)
if (pid != DM_NO_ID):
try:
parentCollection = self.__dependencies[pid]
parentCollection.remove(child)
if (len(parentCollection) == 0):
del self.__dependencies[pid]
except KeyError, ValueError:
pass
def clearDependencies(self, parent):
"Returns a list of objects or an empty list if no dependencies exist as for getDependencies, and then removes the dependency list."
pid = self._getObjectID(parent)
try:
deps = self.__dependencies[pid]
del self.__dependencies[pid]
return deps
except KeyError:
return []
def hasDependency(self, parent):
"Returns a boolean"
return (self._getObjectID(parent) in self.__dependencies)
def getDependencies(self, parent):
"Returns a list of objects or an empty list if no dependencies exist."
try:
return self.__dependencies[self._getObjectID(parent)]
except KeyError:
return []
def dumpState(self, out):
"Writes the state of the dependency manager (as reported by getState) to out"
for line in self.getState():
print >> out, line
def getState(self):
"Returns the state of the dependency manager including all managed objects as a list of strings"
out = []
out.append("DependencyMgr %s has %i parent objects, last id assigned is %i" % (repr(self), len(self.__dependencies), self.__lastID))
for key, val in self.__dependencies.iteritems():
out.append("Object %s has dependents: %s " % (repr(key), ", ".join([repr(d) for d in val])))
return out
def _initObjectID(self, obj):
try:
id = getattr(obj, DM_ID_ATTR)
except AttributeError:
id = DM_NO_ID
if (id == DM_NO_ID):
id = self._newID()
setattr(obj, DM_ID_ATTR, id)
return id
def _getObjectID(self, obj):
try:
id = getattr(obj, DM_ID_ATTR)
except AttributeError:
id = DM_NO_ID
return id
def _newID(self):
self.__lastID += 1
return self.__lastID
def _newDependencyCollection(self):
return []
globalDM = DependencyMgr()
def addDependency(parent, child):
getGlobalDM().addDependency(parent, child)
def removeDependency(parent, child):
getGlobalDM().removeDependency(parent, child)
def clearDependencies(parent):
return getGlobalDM().clearDependencies(parent)
def hasDependency(parent):
return getGlobalDM().hasDependency(parent)
def getDependencies(parent):
return getGlobalDM().getDependencies(parent)
def getState():
return getGlobalDM().getState()
def dumpState(out):
getGlobalDM().dumpState(out)
def getGlobalDM():
return globalDM