jpayne@68: from idlelib import rpc jpayne@68: jpayne@68: def remote_object_tree_item(item): jpayne@68: wrapper = WrappedObjectTreeItem(item) jpayne@68: oid = id(wrapper) jpayne@68: rpc.objecttable[oid] = wrapper jpayne@68: return oid jpayne@68: jpayne@68: class WrappedObjectTreeItem: jpayne@68: # Lives in PYTHON subprocess jpayne@68: jpayne@68: def __init__(self, item): jpayne@68: self.__item = item jpayne@68: jpayne@68: def __getattr__(self, name): jpayne@68: value = getattr(self.__item, name) jpayne@68: return value jpayne@68: jpayne@68: def _GetSubList(self): jpayne@68: sub_list = self.__item._GetSubList() jpayne@68: return list(map(remote_object_tree_item, sub_list)) jpayne@68: jpayne@68: class StubObjectTreeItem: jpayne@68: # Lives in IDLE process jpayne@68: jpayne@68: def __init__(self, sockio, oid): jpayne@68: self.sockio = sockio jpayne@68: self.oid = oid jpayne@68: jpayne@68: def __getattr__(self, name): jpayne@68: value = rpc.MethodProxy(self.sockio, self.oid, name) jpayne@68: return value jpayne@68: jpayne@68: def _GetSubList(self): jpayne@68: sub_list = self.sockio.remotecall(self.oid, "_GetSubList", (), {}) jpayne@68: return [StubObjectTreeItem(self.sockio, oid) for oid in sub_list] jpayne@68: jpayne@68: jpayne@68: if __name__ == '__main__': jpayne@68: from unittest import main jpayne@68: main('idlelib.idle_test.test_debugobj_r', verbosity=2)