=========================
+gh-96905: In idlelib code, stop redefining built-ins 'dict' and 'object'.
+
gh-72284: Improve the lists of features, editor key bindings,
and shell key bingings in the IDLE doc.
class NamespaceViewer:
"Global/local namespace viewer for debugger GUI."
- def __init__(self, master, title, dict=None):
+ def __init__(self, master, title, odict=None): # XXX odict never passed.
width = 0
height = 40
- if dict:
- height = 20*len(dict) # XXX 20 == observed height of Entry widget
+ if odict:
+ height = 20*len(odict) # XXX 20 == observed height of Entry widget
self.master = master
self.title = title
import reprlib
canvas["yscrollcommand"] = vbar.set
self.subframe = subframe = Frame(canvas)
self.sfid = canvas.create_window(0, 0, window=subframe, anchor="nw")
- self.load_dict(dict)
+ self.load_dict(odict)
- dict = -1
+ prev_odict = -1 # Needed for initial comparison below.
- def load_dict(self, dict, force=0, rpc_client=None):
- if dict is self.dict and not force:
+ def load_dict(self, odict, force=0, rpc_client=None):
+ if odict is self.prev_odict and not force:
return
subframe = self.subframe
frame = self.frame
for c in list(subframe.children.values()):
c.destroy()
- self.dict = None
- if not dict:
+ self.prev_odict = None
+ if not odict:
l = Label(subframe, text="None")
l.grid(row=0, column=0)
else:
#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
# interpreter gets into a loop requesting non-existing dict[0],
# dict[1], dict[2], etc from the debugger_r.DictProxy.
# TODO recheck above; see debugger_r 159ff, debugobj 60.
- keys_list = dict.keys()
+ keys_list = odict.keys()
names = sorted(keys_list)
- ###
+
row = 0
for name in names:
- value = dict[name]
+ value = odict[name]
svalue = self.repr.repr(value) # repr(value)
# Strip extra quotes caused by calling repr on the (already)
# repr'd value sent across the RPC interface:
l.insert(0, svalue)
l.grid(row=row, column=1, sticky="nw")
row = row+1
- self.dict = dict
+ self.prev_odict = odict
# XXX Could we use a <Configure> callback for the following?
subframe.update_idletasks() # Alas!
width = subframe.winfo_reqwidth()
def frame_globals(self, fid):
frame = frametable[fid]
- dict = frame.f_globals
- did = id(dict)
- dicttable[did] = dict
+ gdict = frame.f_globals
+ did = id(gdict)
+ dicttable[did] = gdict
return did
def frame_locals(self, fid):
frame = frametable[fid]
- dict = frame.f_locals
- did = id(dict)
- dicttable[did] = dict
+ ldict = frame.f_locals
+ did = id(ldict)
+ dicttable[did] = ldict
return did
def frame_code(self, fid):
def dict_keys(self, did):
raise NotImplementedError("dict_keys not public or pickleable")
-## dict = dicttable[did]
-## return dict.keys()
+## return dicttable[did].keys()
- ### Needed until dict_keys is type is finished and pickealable.
+ ### Needed until dict_keys type is finished and pickleable.
+ # xxx finished. pickleable?
### 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())
+ return list(dicttable[did].keys())
def dict_item(self, did, key):
- dict = dicttable[did]
- value = dict[key]
- value = reprlib.repr(value) ### can't pickle module 'builtins'
- return value
+ value = dicttable[did][key]
+ return reprlib.repr(value) # Can't pickle module 'builtins'.
#----------end class IdbAdapter----------
+"""Define tree items for debug stackviewer, which is only user.
+"""
# XXX TO DO:
# - popup menu
# - support partial or total redisplay
myrepr.maxother = 100
class ObjectTreeItem(TreeItem):
- def __init__(self, labeltext, object, setfunction=None):
+ def __init__(self, labeltext, object_, setfunction=None):
self.labeltext = labeltext
- self.object = object
+ self.object = object_
self.setfunction = setfunction
def GetLabelText(self):
return self.labeltext
item = make_objecttreeitem(
str(key) + " =",
value,
- lambda value, key=key, object=self.object:
- setattr(object, key, value))
+ lambda value, key=key, object_=self.object:
+ setattr(object_, key, value))
sublist.append(item)
return sublist
value = self.object[key]
except KeyError:
continue
- def setfunction(value, key=key, object=self.object):
- object[key] = value
+ def setfunction(value, key=key, object_=self.object):
+ object_[key] = value
item = make_objecttreeitem(f"{key!r}:", value, setfunction)
sublist.append(item)
return sublist
type: ClassTreeItem,
}
-def make_objecttreeitem(labeltext, object, setfunction=None):
- t = type(object)
+def make_objecttreeitem(labeltext, object_, setfunction=None):
+ t = type(object_)
if t in dispatch:
c = dispatch[t]
else:
c = ObjectTreeItem
- return c(labeltext, object, setfunction)
+ return c(labeltext, object_, setfunction)
def _debug_object_browser(parent): # htest #
tiptest(list.append, '(self, object, /)' + append_doc)
tiptest(List.append, '(self, object, /)' + append_doc)
tiptest([].append, '(object, /)' + append_doc)
+ # The use of 'object' above matches the signature text.
tiptest(types.MethodType,
'(function, instance, /)\n'
s = s + " " + str(a)
print(s, file=sys.__stderr__)
- def register(self, oid, object):
- self.objtable[oid] = object
+ def register(self, oid, object_):
+ self.objtable[oid] = object_
def unregister(self, oid):
try:
value = self.object[key]
except KeyError:
continue
- def setfunction(value, key=key, object=self.object):
- object[key] = value
+ def setfunction(value, key=key, object_=self.object):
+ object_[key] = value
item = make_objecttreeitem(key + " =", value, setfunction)
sublist.append(item)
return sublist
--- /dev/null
+In idlelib code, stop redefining built-ins 'dict' and 'object'.