From b3e15fe70eea7a1c94d70f3b210cd36f87b563a0 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sat, 5 Oct 2002 03:58:16 +0000 Subject: [PATCH] Backport 1.43: Extended IDLE's open module menu item to handle hierarchical module names. Closes SF patch 600152. --- Tools/idle/EditorWindow.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/Tools/idle/EditorWindow.py b/Tools/idle/EditorWindow.py index c8f7cb38f575..e469a0fb3c3e 100644 --- a/Tools/idle/EditorWindow.py +++ b/Tools/idle/EditorWindow.py @@ -81,6 +81,20 @@ An Integrated DeveLopment Environment for Python by Guido van Rossum """ % idlever.IDLE_VERSION +def _find_module(fullname, path=None): + """Version of imp.find_module() that handles hierarchical module names""" + + file = None + for tgt in fullname.split('.'): + if file is not None: + file.close() # close intermediate files + (file, filename, descr) = imp.find_module(tgt, path) + if descr[2] == imp.PY_SOURCE: + break # find but not load the source file + module = imp.load_module(tgt, file, filename, descr) + path = module.__path__ + return file, filename, descr + class EditorWindow: from Percolator import Percolator @@ -340,10 +354,9 @@ class EditorWindow: name = string.strip(name) if not name: return - # XXX Ought to support package syntax # XXX Ought to insert current file's directory in front of path try: - (f, file, (suffix, mode, type)) = imp.find_module(name) + (f, file, (suffix, mode, type)) = _find_module(name) except (NameError, ImportError), msg: tkMessageBox.showerror("Import error", str(msg), parent=self.text) return -- 2.47.3