Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions Lib/idlelib/NEWS.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ Released on 2020-10-05?
======================================


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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Make Open Module open a special module such as os.path.