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.
This commit is contained in:
Raymond Hettinger 2002-09-08 03:42:01 +00:00
parent d750036b20
commit b2c729fe27
1 changed files with 15 additions and 2 deletions

View File

@ -81,6 +81,20 @@ An Integrated DeveLopment Environment for Python
by Guido van Rossum by Guido van Rossum
""" % idlever.IDLE_VERSION """ % 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: class EditorWindow:
from Percolator import Percolator from Percolator import Percolator
@ -340,10 +354,9 @@ class EditorWindow:
name = string.strip(name) name = string.strip(name)
if not name: if not name:
return return
# XXX Ought to support package syntax
# XXX Ought to insert current file's directory in front of path # XXX Ought to insert current file's directory in front of path
try: try:
(f, file, (suffix, mode, type)) = imp.find_module(name) (f, file, (suffix, mode, type)) = _find_module(name)
except (NameError, ImportError), msg: except (NameError, ImportError), msg:
tkMessageBox.showerror("Import error", str(msg), parent=self.text) tkMessageBox.showerror("Import error", str(msg), parent=self.text)
return return