1from idlelib import rpc 2 3def remote_object_tree_item(item): 4 wrapper = WrappedObjectTreeItem(item) 5 oid = id(wrapper) 6 rpc.objecttable[oid] = wrapper 7 return oid 8 9class 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 23class 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] 37