From: Samuele P. <ped...@us...> - 2001-01-17 02:24:04
|
Update of /cvsroot/jython/jython/Lib In directory usw-pr-cvs1:/tmp/cvs-serv22381 Modified Files: jreload.py Log Message: java reload support 0.2. Index: jreload.py =================================================================== RCS file: /cvsroot/jython/jython/Lib/jreload.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** jreload.py 2001/01/15 04:50:37 1.1 --- jreload.py 2001/01/17 02:24:00 1.2 *************** *** 1,18 **** # java classes reload support (experimental) # Copyright 2000 Samuele Pedroni ! # ?? doc pending ! __version__ = "0.1" import sys from org.python.core import imp,PyJavaPackage,PyJavaClass import jxxload_help class _Unload: def __init__(self,ls): self.ls = ls self.loader = ls._mgr.loader --- 1,34 ---- # java classes reload support (experimental) # Copyright 2000 Samuele Pedroni ! # ?? doc + examples pending ! # ?? could have problem with import pkg.jclass.inner (this should not be used in any case) ! # ?? using import * with a load-set together with reloading can be confusing ! # cannot be fixed => anyway import * is not for production code + __version__ = "0.2" + import sys from org.python.core import imp,PyJavaPackage,PyJavaClass + from _jython import is_lazy as _is_lazy import jxxload_help + class _LoaderFactory(jxxload_help.JavaLoaderFactory): + def __init__(self,path): + vfs = jxxload_help.PathVFS() + for fname in path: + vfs.addVFS(fname) + self.vfs = vfs + + def makeLoader(self): + return jxxload_help.PathVFSJavaLoader(self.vfs,imp.getSyspathJavaLoader()) + class _Unload: def __init__(self,ls): self.ls = ls + self.ls_name = ls._name self.loader = ls._mgr.loader *************** *** 21,27 **** e = pkg.__dict__[n] if isinstance(e,PyJavaClass): ! if PyJavaClass.isLazy(e): continue if e.classLoader is self.loader: del pkg.__dict__[n] elif isinstance(e,PyJavaPackage): self.do_unload(e) --- 37,49 ---- e = pkg.__dict__[n] if isinstance(e,PyJavaClass): ! if _is_lazy(e): continue if e.classLoader is self.loader: del pkg.__dict__[n] + if pkg.__name__: + n = self.ls_name + '.' + pkg.__name__ + '.' +n + else: + n = self.ls_name + '.' + n + if sys.modules.has_key(n): del sys.modules[n] + elif isinstance(e,PyJavaPackage): self.do_unload(e) *************** *** 29,37 **** def __call__(self): if self.loader: ! self.do_unload(self.ls._top) loader = self.loader jxxload_help.DiscardHelp.discard(loader,loader.interfaces) - if self.ls._mgr.loader is self.loader: - self.ls._mgr.resetLoader() self.loader = None --- 51,59 ---- def __call__(self): if self.loader: ! if self.ls._mgr.checkLoader() is self.loader: ! self.do_unload(self.ls._top) ! self.ls._mgr.resetLoader() loader = self.loader jxxload_help.DiscardHelp.discard(loader,loader.interfaces) self.loader = None *************** *** 42,46 **** def __init__(self,name,path): ! mgr = jxxload_help.PackageManager(path,imp.getSyspathJavaLoader()) self._name = name self._mgr = mgr --- 64,68 ---- def __init__(self,name,path): ! mgr = jxxload_help.PackageManager(path,_LoaderFactory(path)) self._name = name self._mgr = mgr *************** *** 48,59 **** def __getattr__(self,name): ! if name == 'unload': ! return _Unload(self) ! else: return getattr(self._top,name) def __repr__(self): return "<java load-set %s>" % self._name def makeLoadSet(name,path): if sys.modules.has_key('name'): return sys.modules[name] --- 70,87 ---- def __getattr__(self,name): ! try: return getattr(self._top,name) + except: + if name == 'unload': return _Unload(self) + raise + def __repr__(self): return "<java load-set %s>" % self._name + def unloadf(ls): + if not isinstance(ls,LoadSet): raise TypeError,"unloadf(): arg is not a load-set" + return _Unload(ls) + def makeLoadSet(name,path): if sys.modules.has_key('name'): return sys.modules[name] *************** *** 63,72 **** _reload = reload ! def _do_reload(mgr,pkg): pkg_name = pkg.__name__ for n in pkg.__dict__.keys(): e = pkg.__dict__[n] if isinstance(e,PyJavaClass): ! if PyJavaClass.isLazy(e): continue del pkg.__dict__[n] try : --- 91,100 ---- _reload = reload ! def _do_reload(ls_name,mgr,pkg): pkg_name = pkg.__name__ for n in pkg.__dict__.keys(): e = pkg.__dict__[n] if isinstance(e,PyJavaClass): ! if _is_lazy(e): continue del pkg.__dict__[n] try : *************** *** 74,86 **** if c: pkg.__dict__[n] = c except: pass elif isinstance(e,PyJavaPackage): ! _do_reload(mgr,e) def reload(ls): if isinstance(ls,LoadSet): ls._mgr.resetLoader() ! _do_reload(ls._mgr,ls._top) else: return _reload(ls) --- 102,120 ---- if c: pkg.__dict__[n] = c + if pkg_name: + n = ls_name + '.' + pkg_name + '.' + n + else: + n = ls_name + '.' + n + if sys.modules.has_key(n): sys.modules[n] = c except: pass elif isinstance(e,PyJavaPackage): ! _do_reload(ls_name,mgr,e) def reload(ls): if isinstance(ls,LoadSet): ls._mgr.resetLoader() ! _do_reload(ls._name,ls._mgr,ls._top) ! return ls else: return _reload(ls) |