Skip to content

Commit 86ef6fe

Browse files
bpo-41144: Fix IDLE open module error (GH-21182)
Could not open os.path. Co-authored-by: Terry Jan Reedy <[email protected]> (cherry picked from commit 8ab77c6) Co-authored-by: E-Paine <[email protected]>
1 parent e653369 commit 86ef6fe

File tree

4 files changed

+20
-7
lines changed

4 files changed

+20
-7
lines changed

Lib/idlelib/NEWS.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ Released on 2020-07-03?
33
======================================
44

55

6+
bpo-41144: Make Open Module open a special module such as os.path.
7+
68
bpo-40723: Make test_idle pass when run after import.
79
Patch by Florian Dahlitz.
810

Lib/idlelib/idle_test/test_query.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,9 @@ def test_good_module_name(self):
136136
dialog = self.Dummy_ModuleName('idlelib')
137137
self.assertTrue(dialog.entry_ok().endswith('__init__.py'))
138138
self.assertEqual(dialog.entry_error['text'], '')
139+
dialog = self.Dummy_ModuleName('os.path')
140+
self.assertTrue(dialog.entry_ok().endswith('path.py'))
141+
self.assertEqual(dialog.entry_error['text'], '')
139142

140143

141144
class GotoTest(unittest.TestCase):

Lib/idlelib/query.py

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
# HelpSource was extracted from configHelpSourceEdit.py (temporarily
2020
# config_help.py), with darwin code moved from ok to path_ok.
2121

22-
import importlib
22+
import importlib.util, importlib.abc
2323
import os
2424
import shlex
2525
from sys import executable, platform # Platform is set for one test.
@@ -57,7 +57,8 @@ def __init__(self, parent, title, message, *, text0='', used_names={},
5757
self.withdraw() # Hide while configuring, especially geometry.
5858
self.title(title)
5959
self.transient(parent)
60-
self.grab_set()
60+
if not _utest: # Otherwise fail when directly run unittest.
61+
self.grab_set()
6162

6263
windowingsystem = self.tk.call('tk', 'windowingsystem')
6364
if windowingsystem == 'aqua':
@@ -209,17 +210,23 @@ def entry_ok(self):
209210
self.showerror(str(msg))
210211
return None
211212
if spec is None:
212-
self.showerror("module not found")
213+
self.showerror("module not found.")
213214
return None
214215
if not isinstance(spec.loader, importlib.abc.SourceLoader):
215-
self.showerror("not a source-based module")
216+
self.showerror("not a source-based module.")
216217
return None
217218
try:
218219
file_path = spec.loader.get_filename(name)
219220
except AttributeError:
220-
self.showerror("loader does not support get_filename",
221-
parent=self)
221+
self.showerror("loader does not support get_filename.")
222222
return None
223+
except ImportError:
224+
# Some special modules require this (e.g. os.path)
225+
try:
226+
file_path = spec.loader.get_filename()
227+
except TypeError:
228+
self.showerror("loader failed to get filename.")
229+
return None
223230
return file_path
224231

225232

@@ -375,7 +382,7 @@ def cli_args_ok(self):
375382
return cli_args
376383

377384
def entry_ok(self):
378-
"Return apparently valid (cli_args, restart) or None"
385+
"Return apparently valid (cli_args, restart) or None."
379386
cli_args = self.cli_args_ok()
380387
restart = self.restartvar.get()
381388
return None if cli_args is None else (cli_args, restart)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Make Open Module open a special module such as os.path.

0 commit comments

Comments
 (0)