summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorKurt B. Kaiser <kbk@shore.net>2007-08-29 18:44:24 (GMT)
committerKurt B. Kaiser <kbk@shore.net>2007-08-29 18:44:24 (GMT)
commitcf3c4217c755164a6b762c5846ee82636565d6f0 (patch)
tree0d2b305140dbd21260c25ce63770f1bcf464e500 /Lib
parent39342f4e65afdb0a6a4be493dbbbf6fc28357787 (diff)
downloadcpython-cf3c4217c755164a6b762c5846ee82636565d6f0.zip
cpython-cf3c4217c755164a6b762c5846ee82636565d6f0.tar.gz
cpython-cf3c4217c755164a6b762c5846ee82636565d6f0.tar.bz2
1. Debugger was failing to start due to DictProxy limitations.
2. Fix some debug prints in RemoteDebugger.py - use py3k syntax.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/idlelib/Debugger.py15
-rw-r--r--Lib/idlelib/RemoteDebugger.py27
2 files changed, 32 insertions, 10 deletions
diff --git a/Lib/idlelib/Debugger.py b/Lib/idlelib/Debugger.py
index cd31914..346763f 100644
--- a/Lib/idlelib/Debugger.py
+++ b/Lib/idlelib/Debugger.py
@@ -446,7 +446,20 @@ class NamespaceViewer:
l = Label(subframe, text="None")
l.grid(row=0, column=0)
else:
- names = sorted(dict)
+ #names = sorted(dict)
+ ###
+ # Because of (temporary) limitations on the dict_keys type (not yet
+ # public or pickleable), have the subprocess to send a list of
+ # keys, not a dict_keys object. sorted() will take a dict_keys
+ # (no subprocess) or a list.
+ #
+ # There is also an obscure bug in sorted(dict) where the
+ # interpreter gets into a loop requesting non-existing dict[0],
+ # dict[1], dict[2], etc from the RemoteDebugger.DictProxy.
+ ###
+ keys_list = dict.keys()
+ names = sorted(keys_list)
+ ###
row = 0
for name in names:
value = dict[name]
diff --git a/Lib/idlelib/RemoteDebugger.py b/Lib/idlelib/RemoteDebugger.py
index 8a0970d..e5b95b4 100644
--- a/Lib/idlelib/RemoteDebugger.py
+++ b/Lib/idlelib/RemoteDebugger.py
@@ -94,16 +94,13 @@ class IdbAdapter:
self.idb.set_return(frame)
def get_stack(self, fid, tbid):
- ##print >>sys.__stderr__, "get_stack(%r, %r)" % (fid, tbid)
frame = frametable[fid]
if tbid is None:
tb = None
else:
tb = tracebacktable[tbid]
stack, i = self.idb.get_stack(frame, tb)
- ##print >>sys.__stderr__, "get_stack() ->", stack
stack = [(wrap_frame(frame), k) for frame, k in stack]
- ##print >>sys.__stderr__, "get_stack() ->", stack
return stack, i
def run(self, cmd):
@@ -162,13 +159,20 @@ class IdbAdapter:
#----------called by a DictProxy----------
def dict_keys(self, did):
+ raise NotImplemented("dict_keys not public or pickleable")
+## dict = dicttable[did]
+## return dict.keys()
+
+ ### Needed until dict_keys is type is finished and pickealable.
+ ### Will probably need to extend rpc.py:SocketIO._proxify at that time.
+ def dict_keys_list(self, did):
dict = dicttable[did]
return list(dict.keys())
def dict_item(self, did, key):
dict = dicttable[did]
value = dict[key]
- value = repr(value)
+ value = repr(value) ### can't pickle module '__builtin__'
return value
#----------end class IdbAdapter----------
@@ -261,15 +265,20 @@ class DictProxy:
self._oid = oid
self._did = did
+## def keys(self):
+## return self._conn.remotecall(self._oid, "dict_keys", (self._did,), {})
+
+ # 'temporary' until dict_keys is a pickleable built-in type
def keys(self):
- return self._conn.remotecall(self._oid, "dict_keys", (self._did,), {})
+ return self._conn.remotecall(self._oid,
+ "dict_keys_list", (self._did,), {})
def __getitem__(self, key):
return self._conn.remotecall(self._oid, "dict_item",
(self._did, key), {})
def __getattr__(self, name):
- ##print >>sys.__stderr__, "failed DictProxy.__getattr__:", name
+ ##print("*** Failed DictProxy.__getattr__:", name)
raise AttributeError(name)
@@ -280,7 +289,7 @@ class GUIAdapter:
self.gui = gui
def interaction(self, message, fid, modified_info):
- ##print "interaction: (%s, %s, %s)" % (message, fid, modified_info)
+ ##print("*** Interaction: (%s, %s, %s)" % (message, fid, modified_info))
frame = FrameProxy(self.conn, fid)
self.gui.interaction(message, frame, modified_info)
@@ -293,9 +302,9 @@ class IdbProxy:
self.shell = shell
def call(self, methodname, *args, **kwargs):
- ##print "**IdbProxy.call %s %s %s" % (methodname, args, kwargs)
+ ##print("*** IdbProxy.call %s %s %s" % (methodname, args, kwargs))
value = self.conn.remotecall(self.oid, methodname, args, kwargs)
- ##print "**IdbProxy.call %s returns %r" % (methodname, value)
+ ##print("*** IdbProxy.call %s returns %r" % (methodname, value))
return value
def run(self, cmd, locals):