annotate Lib/idlelib/RemoteObjectBrowser.py @ 87690:66c1c9f32567 default tip

Add use_weakref option to functools.lru_cache The use_weakref option makes lru_cache create weak references to the function arguments when creating the cache key, which prevents them from staying in the memory forever even after all other references to them are gone. This is a proof of concept for http://bugs.python.org/issue19859
author Radomir Dopieralski <devel@sheep.art.pl>
date Tue, 03 Dec 2013 16:02:48 +0100
parents bfa5835e10f0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
42714
2ec16b6b4d04 Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents: 42507
diff changeset
1 from idlelib import rpc
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
2
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
3 def remote_object_tree_item(item):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
4 wrapper = WrappedObjectTreeItem(item)
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
5 oid = id(wrapper)
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
6 rpc.objecttable[oid] = wrapper
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
7 return oid
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
8
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
9 class WrappedObjectTreeItem:
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
10 # Lives in PYTHON subprocess
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
11
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
12 def __init__(self, item):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
13 self.__item = item
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
14
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
15 def __getattr__(self, name):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
16 value = getattr(self.__item, name)
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
17 return value
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
18
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
19 def _GetSubList(self):
67816
bfa5835e10f0 #11069: fix the IDLE Stack Viewer, by not using "list" as a variable name.
Georg Brandl <georg@python.org>
parents: 42714
diff changeset
20 sub_list = self.__item._GetSubList()
bfa5835e10f0 #11069: fix the IDLE Stack Viewer, by not using "list" as a variable name.
Georg Brandl <georg@python.org>
parents: 42714
diff changeset
21 return list(map(remote_object_tree_item, sub_list))
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
22
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
23 class StubObjectTreeItem:
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
24 # Lives in IDLE process
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
25
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
26 def __init__(self, sockio, oid):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
27 self.sockio = sockio
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
28 self.oid = oid
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
29
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
30 def __getattr__(self, name):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
31 value = rpc.MethodProxy(self.sockio, self.oid, name)
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
32 return value
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
33
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
34 def _GetSubList(self):
67816
bfa5835e10f0 #11069: fix the IDLE Stack Viewer, by not using "list" as a variable name.
Georg Brandl <georg@python.org>
parents: 42714
diff changeset
35 sub_list = self.sockio.remotecall(self.oid, "_GetSubList", (), {})
bfa5835e10f0 #11069: fix the IDLE Stack Viewer, by not using "list" as a variable name.
Georg Brandl <georg@python.org>
parents: 42714
diff changeset
36 return [StubObjectTreeItem(self.sockio, oid) for oid in sub_list]