From b2c729fe2758d13ce4a5affdc67c3f7573edbc48 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sun, 8 Sep 2002 03:42:01 +0000 Subject: [PATCH] Extended IDLE's open module menu item to handle hierarchical module names. Will look at doing something similar in import.c so that the effort won't have to be repeated elsewhere. 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 9535261f5c0..e8b63ffde27 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