1 from NetProxy import NetProxyWrapper
\r
4 class ModuleNetProxy(NetProxyWrapper):
\r
5 """a netproxy specialzied for exposing remote modules (first tries to getattr,
\r
6 if it fails tries to import)"""
\r
7 __doc__ = NetProxyWrapper.__doc__
\r
9 def __init__(self, proxy, base):
\r
10 NetProxyWrapper.__init__(self, proxy)
\r
11 self.__dict__["____base"] = base
\r
12 self.__dict__["____cache"] = {}
\r
14 def __request__(self, handler, *args):
\r
15 return self.__dict__["____conn"].sync_request(handler, self.__dict__["____oid"], *args)
\r
17 def __getattr__(self, name):
\r
18 if name in self.__dict__["____cache"]:
\r
19 return self.__dict__["____cache"][name]
\r
22 return self.__request__("handle_getattr", name)
\r
23 except AttributeError:
\r
27 fullname = self.__dict__["____base"] + "." + name
\r
28 obj = self.__dict__["____conn"].rimport(fullname)
\r
29 module = ModuleNetProxy(obj, fullname)
\r
30 self.__dict__["____cache"][name] = module
\r
33 raise AttributeError("'module' object has not attribute or submodule %r" % (name,))
\r
35 class RootImporter(object):
\r
36 """the root of the interpreter's import hierarchy"""
\r
38 def __init__(self, conn):
\r
39 self.__dict__["____conn"] = conn
\r
41 def __getitem__(self, name):
\r
42 return self.__dict__["____conn"].rimport(name)
\r
44 def __getattr__(self, name):
\r
45 return ModuleNetProxy(self[name], name)
\r