|
23547
|
1 import rpc
|
|
|
2
|
|
|
3 def remote_object_tree_item(item):
|
|
|
4 wrapper = WrappedObjectTreeItem(item)
|
|
|
5 oid = id(wrapper)
|
|
|
6 rpc.objecttable[oid] = wrapper
|
|
|
7 return oid
|
|
|
8
|
|
|
9 class WrappedObjectTreeItem:
|
|
|
10 # Lives in PYTHON subprocess
|
|
|
11
|
|
|
12 def __init__(self, item):
|
|
|
13 self.__item = item
|
|
|
14
|
|
|
15 def __getattr__(self, name):
|
|
|
16 value = getattr(self.__item, name)
|
|
|
17 return value
|
|
|
18
|
|
|
19 def _GetSubList(self):
|
|
|
20 list = self.__item._GetSubList()
|
|
|
21 return map(remote_object_tree_item, list)
|
|
|
22
|
|
|
23 class StubObjectTreeItem:
|
|
|
24 # Lives in IDLE process
|
|
|
25
|
|
|
26 def __init__(self, sockio, oid):
|
|
|
27 self.sockio = sockio
|
|
|
28 self.oid = oid
|
|
|
29
|
|
|
30 def __getattr__(self, name):
|
|
|
31 value = rpc.MethodProxy(self.sockio, self.oid, name)
|
|
|
32 return value
|
|
|
33
|
|
|
34 def _GetSubList(self):
|
|
|
35 list = self.sockio.remotecall(self.oid, "_GetSubList", (), {})
|
|
|
36 return [StubObjectTreeItem(self.sockio, oid) for oid in list]
|