[Python-checkins] cpython (merge 3.3 -> default): merge w/ 3.3 for issue #18055

brett.cannon python-checkins at python.org
Fri Jun 7 19:18:48 CEST 2013


http://hg.python.org/cpython/rev/3a3ec484ce95
changeset: 84051:3a3ec484ce95
parent: 84049:97adaa820353
parent: 84050:a0d8ae880ae6
user: Brett Cannon <brett at python.org>
date: Fri Jun 07 13:18:36 2013 -0400
summary:
 merge w/ 3.3 for issue #18055
files:
 Lib/idlelib/EditorWindow.py | 57 ++++++++----------------
 Misc/NEWS | 2 +
 2 files changed, 21 insertions(+), 38 deletions(-)
diff --git a/Lib/idlelib/EditorWindow.py b/Lib/idlelib/EditorWindow.py
--- a/Lib/idlelib/EditorWindow.py
+++ b/Lib/idlelib/EditorWindow.py
@@ -1,5 +1,5 @@
-import imp
 import importlib
+import importlib.abc
 import os
 import re
 import string
@@ -35,34 +35,6 @@
 release += '%s%s' % (level[0], serial)
 return release
 
-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)
- try:
- path = module.__path__
- except AttributeError:
- raise ImportError('No source for module ' + module.__name__)
- if descr[2] != imp.PY_SOURCE:
- # If all of the above fails and didn't raise an exception,fallback
- # to a straight import which can find __init__.py in a package.
- m = __import__(fullname)
- try:
- filename = m.__file__
- except AttributeError:
- pass
- else:
- file = None
- descr = os.path.splitext(filename)[1], None, imp.PY_SOURCE
- return file, filename, descr
-
 
 class HelpDialog(object):
 
@@ -687,20 +659,29 @@
 return
 # XXX Ought to insert current file's directory in front of path
 try:
- (f, file, (suffix, mode, type)) = _find_module(name)
- except (NameError, ImportError) as msg:
+ loader = importlib.find_loader(name)
+ except (ValueError, ImportError) as msg:
 tkMessageBox.showerror("Import error", str(msg), parent=self.text)
 return
- if type != imp.PY_SOURCE:
- tkMessageBox.showerror("Unsupported type",
- "%s is not a source module" % name, parent=self.text)
+ if loader is None:
+ tkMessageBox.showerror("Import error", "module not found",
+ parent=self.text)
 return
- if f:
- f.close()
+ if not isinstance(loader, importlib.abc.SourceLoader):
+ tkMessageBox.showerror("Import error", "not a source-based module",
+ parent=self.text)
+ return
+ try:
+ file_path = loader.get_filename(name)
+ except AttributeError:
+ tkMessageBox.showerror("Import error",
+ "loader does not support get_filename",
+ parent=self.text)
+ return
 if self.flist:
- self.flist.open(file)
+ self.flist.open(file_path)
 else:
- self.io.loadfile(file)
+ self.io.loadfile(file_path)
 
 def open_class_browser(self, event=None):
 filename = self.io.filename
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -435,6 +435,8 @@
 IDLE
 ----
 
+- Issue #18055: Move IDLE off of imp and on to importlib.
+
 - Issue #15392: Create a unittest framework for IDLE.
 Initial patch by Rajagopalasarma Jayakrishnan.
 
-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /