]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-41144: Fix IDLE open module error (#21182)
authorE-Paine <63801254+E-Paine@users.noreply.github.com>
Sun, 28 Jun 2020 06:02:47 +0000 (08:02 +0200)
committerGitHub <noreply@github.com>
Sun, 28 Jun 2020 06:02:47 +0000 (02:02 -0400)
Could not open os.path.

Co-authored-by: Terry Jan Reedy <tjreedy@udel.edu>
Lib/idlelib/NEWS.txt
Lib/idlelib/idle_test/test_query.py
Lib/idlelib/query.py
Misc/NEWS.d/next/IDLE/2020-06-27-17-02-00.bpo-41144.JoFGIX.rst [new file with mode: 0644]

index 7982afa7d1f674a90a8c3534a213ef30a4b0a410..c270fcbae2bd172b917287e9eedc95cefe8bf015 100644 (file)
@@ -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.
 
index 6d026cb5320683e767f89c81d706ef7fc7a5dcfe..e968862688b95ea22fa45d3e2cb5b55fd99cf8b8 100644 (file)
@@ -136,6 +136,9 @@ class ModuleNameTest(unittest.TestCase):
         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):
index 2a88530b4d082a51ce189327e76394c818c6608f..015fc7ade459dbde432759a1b66b19ab32e5f6b5 100644 (file)
@@ -19,7 +19,7 @@ Subclass HelpSource gets menu item and path for additions to Help menu.
 # 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.
@@ -57,7 +57,8 @@ class Query(Toplevel):
         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':
@@ -209,17 +210,23 @@ class ModuleName(Query):
             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
 
 
@@ -375,7 +382,7 @@ class CustomRun(Query):
         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)
diff --git a/Misc/NEWS.d/next/IDLE/2020-06-27-17-02-00.bpo-41144.JoFGIX.rst b/Misc/NEWS.d/next/IDLE/2020-06-27-17-02-00.bpo-41144.JoFGIX.rst
new file mode 100644 (file)
index 0000000..ed558d3
--- /dev/null
@@ -0,0 +1 @@
+Make Open Module open a special module such as os.path.