Skip to content

Commit 5054459

Browse files
[3.11] pythongh-103668: Run pyugrade on idlelib (pythonGH-103671) (python#103730)
--------- (cherry picked from commit bd2dca0) Co-authored-by: Nikita Sobolev <[email protected]> Co-authored-by: Terry Jan Reedy [email protected]
1 parent 7b2ac6c commit 5054459

17 files changed

+50
-50
lines changed

Lib/idlelib/calltip_w.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ def __init__(self, text_widget):
2525
text_widget: a Text widget with code for which call-tips are desired
2626
"""
2727
# Note: The Text widget will be accessible as self.anchor_widget
28-
super(CalltipWindow, self).__init__(text_widget)
28+
super().__init__(text_widget)
2929

3030
self.label = self.text = None
3131
self.parenline = self.parencol = self.lastline = None
@@ -54,7 +54,7 @@ def position_window(self):
5454
return
5555
self.lastline = curline
5656
self.anchor_widget.see("insert")
57-
super(CalltipWindow, self).position_window()
57+
super().position_window()
5858

5959
def showtip(self, text, parenleft, parenright):
6060
"""Show the call-tip, bind events which will close it and reposition it.
@@ -73,7 +73,7 @@ def showtip(self, text, parenleft, parenright):
7373
self.parenline, self.parencol = map(
7474
int, self.anchor_widget.index(parenleft).split("."))
7575

76-
super(CalltipWindow, self).showtip()
76+
super().showtip()
7777

7878
self._bind_events()
7979

@@ -143,7 +143,7 @@ def hidetip(self):
143143
# ValueError may be raised by MultiCall
144144
pass
145145

146-
super(CalltipWindow, self).hidetip()
146+
super().hidetip()
147147

148148
def _bind_events(self):
149149
"""Bind event handlers."""

Lib/idlelib/debugger.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,9 @@ def __frame2message(self, frame):
4949
filename = code.co_filename
5050
lineno = frame.f_lineno
5151
basename = os.path.basename(filename)
52-
message = "%s:%s" % (basename, lineno)
52+
message = f"{basename}:{lineno}"
5353
if code.co_name != "?":
54-
message = "%s: %s()" % (message, code.co_name)
54+
message = f"{message}: {code.co_name}()"
5555
return message
5656

5757

@@ -213,7 +213,8 @@ def interaction(self, message, frame, info=None):
213213
m1 = "%s" % str(type)
214214
if value is not None:
215215
try:
216-
m1 = "%s: %s" % (m1, str(value))
216+
# TODO redo entire section, tries not needed.
217+
m1 = f"{m1}: {value}"
217218
except:
218219
pass
219220
bg = "yellow"

Lib/idlelib/debugobj.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ def GetSubList(self):
8787
continue
8888
def setfunction(value, key=key, object=self.object):
8989
object[key] = value
90-
item = make_objecttreeitem("%r:" % (key,), value, setfunction)
90+
item = make_objecttreeitem(f"{key!r}:", value, setfunction)
9191
sublist.append(item)
9292
return sublist
9393

Lib/idlelib/editor.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,13 @@
3838
def _sphinx_version():
3939
"Format sys.version_info to produce the Sphinx version string used to install the chm docs"
4040
major, minor, micro, level, serial = sys.version_info
41-
release = '%s%s' % (major, minor)
42-
release += '%s' % (micro,)
41+
# TODO remove unneeded function since .chm no longer installed
42+
release = f'{major}{minor}'
43+
release += f'{micro}'
4344
if level == 'candidate':
44-
release += 'rc%s' % (serial,)
45+
release += f'rc{serial}'
4546
elif level != 'final':
46-
release += '%s%s' % (level[0], serial)
47+
release += f'{level[0]}{serial}'
4748
return release
4849

4950

@@ -950,7 +951,7 @@ def update_recent_files_list(self, new_file=None):
950951
rf_list = []
951952
file_path = self.recent_files_path
952953
if file_path and os.path.exists(file_path):
953-
with open(file_path, 'r',
954+
with open(file_path,
954955
encoding='utf_8', errors='replace') as rf_list_file:
955956
rf_list = rf_list_file.readlines()
956957
if new_file:
@@ -1458,7 +1459,7 @@ def newline_and_indent_event(self, event):
14581459
else:
14591460
self.reindent_to(y.compute_backslash_indent())
14601461
else:
1461-
assert 0, "bogus continuation type %r" % (c,)
1462+
assert 0, f"bogus continuation type {c!r}"
14621463
return "break"
14631464

14641465
# This line starts a brand new statement; indent relative to

Lib/idlelib/filelist.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def open(self, filename, action=None):
2222
# This can happen when bad filename is passed on command line:
2323
messagebox.showerror(
2424
"File Error",
25-
"%r is a directory." % (filename,),
25+
f"{filename!r} is a directory.",
2626
master=self.root)
2727
return None
2828
key = os.path.normcase(filename)
@@ -90,7 +90,7 @@ def filename_changed_edit(self, edit):
9090
self.inversedict[conflict] = None
9191
messagebox.showerror(
9292
"Name Conflict",
93-
"You now have multiple edit windows open for %r" % (filename,),
93+
f"You now have multiple edit windows open for {filename!r}",
9494
master=self.root)
9595
self.dict[newkey] = edit
9696
self.inversedict[edit] = newkey

Lib/idlelib/idle_test/test_config.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ def setUpClass(cls):
191191
idle_dir = os.path.abspath(sys.path[0])
192192
for ctype in conf.config_types:
193193
config_path = os.path.join(idle_dir, '../config-%s.def' % ctype)
194-
with open(config_path, 'r') as f:
194+
with open(config_path) as f:
195195
cls.config_string[ctype] = f.read()
196196

197197
cls.orig_warn = config._warn

Lib/idlelib/idle_test/test_outwin.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ def test_file_line_helper(self, mock_open):
159159
for line, expected_output in test_lines:
160160
self.assertEqual(flh(line), expected_output)
161161
if expected_output:
162-
mock_open.assert_called_with(expected_output[0], 'r')
162+
mock_open.assert_called_with(expected_output[0])
163163

164164

165165
if __name__ == '__main__':

Lib/idlelib/multicall.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,9 @@
5252
_modifier_masks = (MC_CONTROL, MC_ALT, MC_SHIFT, MC_META)
5353

5454
# a dictionary to map a modifier name into its number
55-
_modifier_names = dict([(name, number)
55+
_modifier_names = {name: number
5656
for number in range(len(_modifiers))
57-
for name in _modifiers[number]])
57+
for name in _modifiers[number]}
5858

5959
# In 3.4, if no shell window is ever open, the underlying Tk widget is
6060
# destroyed before .__del__ methods here are called. The following
@@ -134,7 +134,7 @@ def nbits(n):
134134
return nb
135135
statelist = []
136136
for state in states:
137-
substates = list(set(state & x for x in states))
137+
substates = list({state & x for x in states})
138138
substates.sort(key=nbits, reverse=True)
139139
statelist.append(substates)
140140
return statelist
@@ -258,9 +258,9 @@ def __del__(self):
258258
_binder_classes = (_ComplexBinder,) * 4 + (_SimpleBinder,) * (len(_types)-4)
259259

260260
# A dictionary to map a type name into its number
261-
_type_names = dict([(name, number)
261+
_type_names = {name: number
262262
for number in range(len(_types))
263-
for name in _types[number]])
263+
for name in _types[number]}
264264

265265
_keysym_re = re.compile(r"^\w+$")
266266
_button_re = re.compile(r"^[1-5]$")

Lib/idlelib/outwin.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ def file_line_helper(line):
4242
if match:
4343
filename, lineno = match.group(1, 2)
4444
try:
45-
f = open(filename, "r")
45+
f = open(filename)
4646
f.close()
4747
break
4848
except OSError:

Lib/idlelib/pyshell.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ def store_file_breaks(self):
249249
breaks = self.breakpoints
250250
filename = self.io.filename
251251
try:
252-
with open(self.breakpointPath, "r") as fp:
252+
with open(self.breakpointPath) as fp:
253253
lines = fp.readlines()
254254
except OSError:
255255
lines = []
@@ -279,7 +279,7 @@ def restore_file_breaks(self):
279279
if filename is None:
280280
return
281281
if os.path.isfile(self.breakpointPath):
282-
with open(self.breakpointPath, "r") as fp:
282+
with open(self.breakpointPath) as fp:
283283
lines = fp.readlines()
284284
for line in lines:
285285
if line.startswith(filename + '='):
@@ -441,7 +441,7 @@ def build_subprocess_arglist(self):
441441
# run from the IDLE source directory.
442442
del_exitf = idleConf.GetOption('main', 'General', 'delete-exitfunc',
443443
default=False, type='bool')
444-
command = "__import__('idlelib.run').run.main(%r)" % (del_exitf,)
444+
command = f"__import__('idlelib.run').run.main({del_exitf!r})"
445445
return [sys.executable] + w + ["-c", command, str(self.port)]
446446

447447
def start_subprocess(self):
@@ -574,9 +574,9 @@ def transfer_path(self, with_cwd=False):
574574

575575
self.runcommand("""if 1:
576576
import sys as _sys
577-
_sys.path = %r
577+
_sys.path = {!r}
578578
del _sys
579-
\n""" % (path,))
579+
\n""".format(path))
580580

581581
active_seq = None
582582

@@ -703,14 +703,14 @@ def stuffsource(self, source):
703703
def prepend_syspath(self, filename):
704704
"Prepend sys.path with file's directory if not already included"
705705
self.runcommand("""if 1:
706-
_filename = %r
706+
_filename = {!r}
707707
import sys as _sys
708708
from os.path import dirname as _dirname
709709
_dir = _dirname(_filename)
710710
if not _dir in _sys.path:
711711
_sys.path.insert(0, _dir)
712712
del _filename, _sys, _dirname, _dir
713-
\n""" % (filename,))
713+
\n""".format(filename))
714714

715715
def showsyntaxerror(self, filename=None):
716716
"""Override Interactive Interpreter method: Use Colorizing
@@ -1536,7 +1536,7 @@ def main():
15361536
try:
15371537
opts, args = getopt.getopt(sys.argv[1:], "c:deihnr:st:")
15381538
except getopt.error as msg:
1539-
print("Error: %s\n%s" % (msg, usage_msg), file=sys.stderr)
1539+
print(f"Error: {msg}\n{usage_msg}", file=sys.stderr)
15401540
sys.exit(2)
15411541
for o, a in opts:
15421542
if o == '-c':
@@ -1668,9 +1668,9 @@ def main():
16681668
if cmd or script:
16691669
shell.interp.runcommand("""if 1:
16701670
import sys as _sys
1671-
_sys.argv = %r
1671+
_sys.argv = {!r}
16721672
del _sys
1673-
\n""" % (sys.argv,))
1673+
\n""".format(sys.argv))
16741674
if cmd:
16751675
shell.interp.execsource(cmd)
16761676
elif script:

Lib/idlelib/redirector.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,8 @@ def __init__(self, widget):
4747
tk.createcommand(w, self.dispatch)
4848

4949
def __repr__(self):
50-
return "%s(%s<%s>)" % (self.__class__.__name__,
51-
self.widget.__class__.__name__,
52-
self.widget._w)
50+
w = self.widget
51+
return f"{self.__class__.__name__,}({w.__class__.__name__}<{w._w}>)"
5352

5453
def close(self):
5554
"Unregister operations and revert redirection created by .__init__."
@@ -143,8 +142,7 @@ def __init__(self, redir, operation):
143142
self.orig_and_operation = (redir.orig, operation)
144143

145144
def __repr__(self):
146-
return "%s(%r, %r)" % (self.__class__.__name__,
147-
self.redir, self.operation)
145+
return f"{self.__class__.__name__,}({self.redir!r}, {self.operation!r})"
148146

149147
def __call__(self, *args):
150148
return self.tk_call(self.orig_and_operation + args)

Lib/idlelib/rpc.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ def localcall(self, seq, request):
174174
except TypeError:
175175
return ("ERROR", "Bad request format")
176176
if oid not in self.objtable:
177-
return ("ERROR", "Unknown object id: %r" % (oid,))
177+
return ("ERROR", f"Unknown object id: {oid!r}")
178178
obj = self.objtable[oid]
179179
if methodname == "__methods__":
180180
methods = {}
@@ -185,7 +185,7 @@ def localcall(self, seq, request):
185185
_getattributes(obj, attributes)
186186
return ("OK", attributes)
187187
if not hasattr(obj, methodname):
188-
return ("ERROR", "Unsupported method name: %r" % (methodname,))
188+
return ("ERROR", f"Unsupported method name: {methodname!r}")
189189
method = getattr(obj, methodname)
190190
try:
191191
if how == 'CALL':

Lib/idlelib/run.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,13 @@ def idle_formatwarning(message, category, filename, lineno, line=None):
5252
"""Format warnings the IDLE way."""
5353

5454
s = "\nWarning (from warnings module):\n"
55-
s += ' File \"%s\", line %s\n' % (filename, lineno)
55+
s += f' File \"{filename}\", line {lineno}\n'
5656
if line is None:
5757
line = linecache.getline(filename, lineno)
5858
line = line.strip()
5959
if line:
6060
s += " %s\n" % line
61-
s += "%s: %s\n" % (category.__name__, message)
61+
s += f"{category.__name__}: {message}\n"
6262
return s
6363

6464
def idle_showwarning_subproc(

Lib/idlelib/textview.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ def view_file(parent, title, filename, encoding, modal=True, wrap='word',
169169
with contents of the file.
170170
"""
171171
try:
172-
with open(filename, 'r', encoding=encoding) as file:
172+
with open(filename, encoding=encoding) as file:
173173
contents = file.read()
174174
except OSError:
175175
showerror(title='File Load Error',

Lib/idlelib/tooltip.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ def __init__(self, anchor_widget, hover_delay=1000):
9292
e.g. after hovering over the anchor widget with the mouse for enough
9393
time.
9494
"""
95-
super(OnHoverTooltipBase, self).__init__(anchor_widget)
95+
super().__init__(anchor_widget)
9696
self.hover_delay = hover_delay
9797

9898
self._after_id = None
@@ -107,7 +107,7 @@ def __del__(self):
107107
self.anchor_widget.unbind("<Button>", self._id3) # pragma: no cover
108108
except TclError:
109109
pass
110-
super(OnHoverTooltipBase, self).__del__()
110+
super().__del__()
111111

112112
def _show_event(self, event=None):
113113
"""event handler to display the tooltip"""
@@ -139,7 +139,7 @@ def hidetip(self):
139139
self.unschedule()
140140
except TclError: # pragma: no cover
141141
pass
142-
super(OnHoverTooltipBase, self).hidetip()
142+
super().hidetip()
143143

144144

145145
class Hovertip(OnHoverTooltipBase):
@@ -154,7 +154,7 @@ def __init__(self, anchor_widget, text, hover_delay=1000):
154154
e.g. after hovering over the anchor widget with the mouse for enough
155155
time.
156156
"""
157-
super(Hovertip, self).__init__(anchor_widget, hover_delay=hover_delay)
157+
super().__init__(anchor_widget, hover_delay=hover_delay)
158158
self.text = text
159159

160160
def showcontents(self):

Lib/idlelib/tree.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
if os.path.isdir(_icondir):
3333
ICONDIR = _icondir
3434
elif not os.path.isdir(ICONDIR):
35-
raise RuntimeError("can't find icon directory (%r)" % (ICONDIR,))
35+
raise RuntimeError(f"can't find icon directory ({ICONDIR!r})")
3636

3737
def listicons(icondir=ICONDIR):
3838
"""Utility to display the available icons."""

Lib/idlelib/undo.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@ def __repr__(self):
309309
s = self.__class__.__name__
310310
strs = []
311311
for cmd in self.cmds:
312-
strs.append(" %r" % (cmd,))
312+
strs.append(f" {cmd!r}")
313313
return s + "(\n" + ",\n".join(strs) + "\n)"
314314

315315
def __len__(self):

0 commit comments

Comments
 (0)