Update of /cvsroot/webware/Webware/MiddleKit/Core
In directory usw-pr-cvs1:/tmp/cvs-serv10327/Core
Modified Files:
Klasses.py Model.py
Log Message:
- factored out the "pickle cache" code into the reusable
MiscUtils.PickleCache module
Index: Klasses.py
===================================================================
RCS file: /cvsroot/webware/Webware/MiddleKit/Core/Klasses.py,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -d -r1.8 -r1.9
*** Klasses.py 10 Nov 2002 10:43:23 -0000 1.8
--- Klasses.py 11 Nov 2002 02:19:25 -0000 1.9
***************
*** 69,73 ****
# @@ 2000-11-24 ce: split into readTable()
self._filename = filename
! table = DataTable(filename)
# in case we want to look at these later:
self._tableHeadings = table.headings()
--- 69,73 ----
# @@ 2000-11-24 ce: split into readTable()
self._filename = filename
! table = DataTable(filename, usePickleCache=0) # because PickleCache is used at the Model level
# in case we want to look at these later:
self._tableHeadings = table.headings()
Index: Model.py
===================================================================
RCS file: /cvsroot/webware/Webware/MiddleKit/Core/Model.py,v
retrieving revision 1.14
retrieving revision 1.15
diff -C2 -d -r1.14 -r1.15
*** Model.py 10 Nov 2002 13:16:58 -0000 1.14
--- Model.py 11 Nov 2002 02:19:25 -0000 1.15
***************
*** 74,142 ****
# read the pickled version of Classes if possible
! didReadPickle = 0
! shouldDeletePickle = 0
shouldUseCache = self.setting('UsePickledClassesCache', 1)
if shouldUseCache:
! picklePath = csvPath + '.pickle.cache'
! if os.path.exists(picklePath):
! if os.path.getmtime(picklePath)<os.path.getmtime(csvPath):
! shouldDeletePickle = 1
! else:
! try:
! file = open(picklePath)
! except IOError:
! pass
! else:
! try:
! #print '>> reading', picklePath
! dict = load(file)
! except EOFError:
! shouldDeletePickle = 1
! else:
! file.close()
! assert isinstance(dict, DictType), 'type=%r dict=%r' % (type(dict), dict)
! for key in ('source', 'data', 'pickle version', 'python version'):
! assert dict.has_key(key)
! if dict['source']!='MiddleKit':
! shouldDeletePickle = 1
! elif dict['pickle version']!=self.pickleVersion:
! shouldDeletePickle = 1
! elif dict['python version']!=sys.version_info:
! shouldDeletePickle = 1
! else:
! self._klasses = dict['data']
! self._klasses._model = self
! didReadPickle = 1
!
! # delete the pickle file if suggested by previous conditions
! if shouldDeletePickle:
! try:
! os.remove(picklePath)
! except OSError:
! pass
# read the regular file if necessary
! if not didReadPickle:
! #print '>> reading', csvPath
self.klasses().read(csvPath)
!
! # write the pickle file when needed
! if shouldUseCache and (shouldDeletePickle or not didReadPickle):
! # write pickled version of klasses which loads much faster than CSV files
! #print '>> writing', picklePath
! dict = {
! 'source': 'MiddleKit',
! 'python version': sys.version_info,
! 'pickle version': self.pickleVersion,
! 'data': self._klasses,
! }
! try:
! file = open(picklePath, 'w')
! except IOError:
! #print '>> woops. not writing due to IOError.'
! pass
! else:
! dump(dict, file, 1) # 1 = binary format
! file.close()
def __getstate__(self):
--- 74,91 ----
# read the pickled version of Classes if possible
! data = None
shouldUseCache = self.setting('UsePickledClassesCache', 1)
if shouldUseCache:
! from MiscUtils.PickleCache import readPickleCache, writePickleCache
! data = readPickleCache(csvPath, pickleVersion=1, source='MiddleKit')
# read the regular file if necessary
! if data is None:
self.klasses().read(csvPath)
! if shouldUseCache:
! writePickleCache(self._klasses, csvPath, pickleVersion=1, source='MiddleKit')
! else:
! self._klasses = data
! self._klasses._model = self
def __getstate__(self):
|