Chui Tey | 5d2af63 | 2002-05-26 13:36:41 +0000 | [diff] [blame] | 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] |