|
[Jython-checkins] CVS: jython/Lib LazyDict.py,NONE,2.1 javaos.py,2.18,2.19 popen2.py,2.5,2.6
From: Kevin J. Butler <kevinbutler@us...> - 2003-04-18 05:47
|
Update of /cvsroot/jython/jython/Lib
In directory sc8-pr-cvs1:/tmp/cvs-serv31692
Modified Files:
javaos.py popen2.py
Added Files:
LazyDict.py
Log Message:
Optimize startup by delaying javashell functions until needed
--- NEW FILE: LazyDict.py ---
from UserDict import UserDict
class LazyDict( UserDict ):
"""A lazy-populating User Dictionary.
Lazy initialization is not thread-safe.
"""
def __init__( self,
dict=None,
populate=None,
keyTransform=None ):
"""dict: starting dictionary of values
populate: function that returns the populated dictionary
keyTransform: function to normalize the keys (e.g., toupper/None)
"""
UserDict.__init__( self, dict )
self._populated = 0
self.__populateFunc = populate or (lambda: {})
self._keyTransform = keyTransform or (lambda key: key)
def __populate( self ):
if not self._populated:
# race condition - test, populate, set
# make sure you don't set _populated until __populateFunc completes...
self.data = self.__populateFunc()
self._populated = 1
########## extend methods from UserDict by pre-populating
def __repr__(self):
self.__populate()
return UserDict.__repr__( self )
def __cmp__(self, dict):
self.__populate()
return UserDict.__cmp__( self, dict )
def __len__(self):
self.__populate()
return UserDict.__len__( self )
def __getitem__(self, key):
self.__populate()
return UserDict.__getitem__( self, self._keyTransform(key) )
def __setitem__(self, key, item):
self.__populate()
UserDict.__setitem__( self, self._keyTransform(key), item )
def __delitem__(self, key):
self.__populate()
UserDict.__delitem__( self, self._keyTransform(key) )
def clear(self):
self.__populate()
UserDict.clear( self )
def copy(self):
self.__populate()
return UserDict.copy( self )
def keys(self):
self.__populate()
return UserDict.keys( self )
def items(self):
self.__populate()
return UserDict.items( self )
def values(self):
self.__populate()
return UserDict.values( self )
def has_key(self, key):
self.__populate()
return UserDict.has_key( self, self._keyTransform(key) )
def update(self, dict):
self.__populate()
UserDict.update( self, dict )
def get(self, key, failobj=None):
self.__populate()
return UserDict.get( self, self._keyTransform(key), failobj )
def setdefault(self, key, failobj=None):
self.__populate()
return UserDict.setdefault( self, self._keyTransform(key), failobj )
def popitem(self):
self.__populate()
return UserDict.popitem( self )
Index: javaos.py
===================================================================
RCS file: /cvsroot/jython/jython/Lib/javaos.py,v
retrieving revision 2.18
retrieving revision 2.19
diff -C2 -d -r2.18 -r2.19
*** javaos.py 9 Apr 2003 13:51:50 -0000 2.18
--- javaos.py 18 Apr 2003 05:47:27 -0000 2.19
***************
*** 30,33 ****
--- 30,34 ----
from java.io import File
import javapath as path
+ from LazyDict import LazyDict
error = OSError
***************
*** 101,109 ****
File(path).setLastModified(long(times[1] * 1000.0))
! # provide environ, popen*, and system objects
! from javashell import environ, putenv, getenv
! from popen2 import popen, system
- # os versions have different return value order than popen2 functions
def popen2(cmd, mode="t", bufsize=-1):
import popen2
--- 102,130 ----
File(path).setLastModified(long(times[1] * 1000.0))
! # Provide lazy environ, popen*, and system objects
! # Do these lazily, as most jython programs don't need them,
! # and they are very expensive to initialize
!
! def _getEnvironment():
! import javashell
! return javashell._shellEnv.environment
!
! environ = LazyDict( populate=_getEnvironment )
! putenv = environ.__setitem__
! getenv = environ.__getitem__
!
! def system( *args, **kwargs ):
! # allow lazy import of popen2 and javashell
! import popen2
! return popen2.system( *args, **kwargs )
!
! def popen( *args, **kwargs ):
! # allow lazy import of popen2 and javashell
! import popen2
! return popen2.popen( *args, **kwargs )
!
! # os module versions of the popen# methods have different return value
! # order than popen2 functions
def popen2(cmd, mode="t", bufsize=-1):
import popen2
Index: popen2.py
===================================================================
RCS file: /cvsroot/jython/jython/Lib/popen2.py,v
retrieving revision 2.5
retrieving revision 2.6
diff -C2 -d -r2.5 -r2.6
*** popen2.py 19 Dec 2002 22:03:24 -0000 2.5
--- popen2.py 18 Apr 2003 05:47:27 -0000 2.6
***************
*** 65,69 ****
specifies the size of the I/O buffers to/from the child process.
"""
- import os
self.process = shellexecute( cmd )
self._tochild = self.process.getOutputStream()
--- 65,68 ----
|
| Thread | Author | Date |
|---|---|---|
| [Jython-checkins] CVS: jython/Lib LazyDict.py,NONE,2.1 javaos.py,2.18,2.19 popen2.py,2.5,2.6 | Kevin J. Butler <kevinbutler@us...> |