Skip to content

Commit

Permalink
bpo-41144: Fix IDLE open module error (GH-21182)
Browse files Browse the repository at this point in the history
Could not open os.path.

Co-authored-by: Terry Jan Reedy <tjreedy@udel.edu>
(cherry picked from commit 8ab77c6)

Co-authored-by: E-Paine <63801254+E-Paine@users.noreply.github.com>
  • Loading branch information
miss-islington and E-Paine committed Jun 28, 2020
1 parent e653369 commit 86ef6fe
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 7 deletions.
2 changes: 2 additions & 0 deletions Lib/idlelib/NEWS.txt
Expand Up @@ -3,6 +3,8 @@ Released on 2020-07-03?
======================================


bpo-41144: Make Open Module open a special module such as os.path.

bpo-40723: Make test_idle pass when run after import.
Patch by Florian Dahlitz.

Expand Down
3 changes: 3 additions & 0 deletions Lib/idlelib/idle_test/test_query.py
Expand Up @@ -136,6 +136,9 @@ def test_good_module_name(self):
dialog = self.Dummy_ModuleName('idlelib')
self.assertTrue(dialog.entry_ok().endswith('__init__.py'))
self.assertEqual(dialog.entry_error['text'], '')
dialog = self.Dummy_ModuleName('os.path')
self.assertTrue(dialog.entry_ok().endswith('path.py'))
self.assertEqual(dialog.entry_error['text'], '')


class GotoTest(unittest.TestCase):
Expand Down
21 changes: 14 additions & 7 deletions Lib/idlelib/query.py
Expand Up @@ -19,7 +19,7 @@
# HelpSource was extracted from configHelpSourceEdit.py (temporarily
# config_help.py), with darwin code moved from ok to path_ok.

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

windowingsystem = self.tk.call('tk', 'windowingsystem')
if windowingsystem == 'aqua':
Expand Down Expand Up @@ -209,17 +210,23 @@ def entry_ok(self):
self.showerror(str(msg))
return None
if spec is None:
self.showerror("module not found")
self.showerror("module not found.")
return None
if not isinstance(spec.loader, importlib.abc.SourceLoader):
self.showerror("not a source-based module")
self.showerror("not a source-based module.")
return None
try:
file_path = spec.loader.get_filename(name)
except AttributeError:
self.showerror("loader does not support get_filename",
parent=self)
self.showerror("loader does not support get_filename.")
return None
except ImportError:
# Some special modules require this (e.g. os.path)
try:
file_path = spec.loader.get_filename()
except TypeError:
self.showerror("loader failed to get filename.")
return None
return file_path


Expand Down Expand Up @@ -375,7 +382,7 @@ def cli_args_ok(self):
return cli_args

def entry_ok(self):
"Return apparently valid (cli_args, restart) or None"
"Return apparently valid (cli_args, restart) or None."
cli_args = self.cli_args_ok()
restart = self.restartvar.get()
return None if cli_args is None else (cli_args, restart)
Expand Down
@@ -0,0 +1 @@
Make Open Module open a special module such as os.path.

0 comments on commit 86ef6fe

Please sign in to comment.