Commit | Line | Data |
---|---|---|
86530b38 AT |
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] |