Update of /cvsroot/webware/Webware/MiddleKit/Core
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6769/Core
Modified Files:
Model.py
Log Message:
- Enable models to be loaded directly from Classes files.
This is for support of an upcoming doc tool.
Index: Model.py
===================================================================
RCS file: /cvsroot/webware/Webware/MiddleKit/Core/Model.py,v
retrieving revision 1.20
retrieving revision 1.21
diff -C2 -d -r1.20 -r1.21
*** Model.py 19 Dec 2003 05:39:45 -0000 1.20
--- Model.py 1 Feb 2004 04:41:03 -0000 1.21
***************
*** 34,38 ****
# Klass or Attr
! def __init__(self, filename=None, customCoreClasses={}, rootModel=None, havePythonClasses=1):
Configurable.__init__(self)
self._havePythonClasses = havePythonClasses
--- 34,38 ----
# Klass or Attr
! def __init__(self, filename=None, classesFilename=None, customCoreClasses={}, rootModel=None, havePythonClasses=1):
Configurable.__init__(self)
self._havePythonClasses = havePythonClasses
***************
*** 40,43 ****
--- 40,44 ----
self._coreClasses = customCoreClasses
self._klasses = None
+ self._name = None
self._parents = [] # e.g., parent models
self._pyClassForName = {}
***************
*** 50,55 ****
self._rootModel = rootModel
! if filename!=None:
! self.read(filename)
def name(self):
--- 51,56 ----
self._rootModel = rootModel
! if filename or classesFilename:
! self.read(filename or classesFilename, classesFilename is not None)
def name(self):
***************
*** 67,71 ****
return self._filename
! def read(self, filename):
assert self._filename is None, 'Cannot read twice.'
# Assume the .mkmodel extension if none is given
--- 68,74 ----
return self._filename
! def read(self, filename, isClassesFile=0):
! import time
! start = time.time()
assert self._filename is None, 'Cannot read twice.'
# Assume the .mkmodel extension if none is given
***************
*** 74,80 ****
self._filename = os.path.abspath(filename)
self._name = None
! self.readParents()
try:
! self.readKlasses()
self.awakeFromRead()
except ModelError, e:
--- 77,89 ----
self._filename = os.path.abspath(filename)
self._name = None
! if isClassesFile:
! self.dontReadParents()
! else:
! self.readParents() # the norm
try:
! if isClassesFile:
! self.readKlassesDirectly(filename)
! else:
! self.readKlassesInModelDir() # the norm
self.awakeFromRead()
except ModelError, e:
***************
*** 83,88 ****
e.printError(filename)
sys.exit(1)
! def readKlasses(self):
"""
Reads the Classes.csv file, or the Classes.pickle.cache file as
--- 92,99 ----
e.printError(filename)
sys.exit(1)
+ dur = time.time() - start
+ print '%.2f seconds' % dur
! def readKlassesInModelDir(self):
"""
Reads the Classes.csv file, or the Classes.pickle.cache file as
***************
*** 99,102 ****
--- 110,116 ----
open(csvPath) # to get a properly constructed IOError
+ self.readKlassesDirectly(path)
+
+ def readKlassesDirectly(self, path):
# read the pickled version of Classes if possible
data = None
***************
*** 183,186 ****
--- 197,207 ----
self._searchOrder = searchOrder
+ def dontReadParents(self):
+ """
+ The attributes _parents and _searchOrder are set.
+ Used internally for the rare case of reading class files directly (instead of from a model directory).
+ """
+ self._parents = []
+ self._searchOrder = [self]
def allModelsDepthFirstLeftRight(self, parents=None):
|