mirror of https://github.com/python/cpython
merge w/ 3.3 for issue #18055
This commit is contained in:
commit
abb18af38f
|
@ -1,5 +1,5 @@
|
||||||
import imp
|
|
||||||
import importlib
|
import importlib
|
||||||
|
import importlib.abc
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import string
|
import string
|
||||||
|
@ -35,34 +35,6 @@ def _sphinx_version():
|
||||||
release += '%s%s' % (level[0], serial)
|
release += '%s%s' % (level[0], serial)
|
||||||
return release
|
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):
|
class HelpDialog(object):
|
||||||
|
|
||||||
|
@ -687,20 +659,29 @@ class EditorWindow(object):
|
||||||
return
|
return
|
||||||
# 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)) = _find_module(name)
|
loader = importlib.find_loader(name)
|
||||||
except (NameError, ImportError) as msg:
|
except (ValueError, ImportError) as msg:
|
||||||
tkMessageBox.showerror("Import error", str(msg), parent=self.text)
|
tkMessageBox.showerror("Import error", str(msg), parent=self.text)
|
||||||
return
|
return
|
||||||
if type != imp.PY_SOURCE:
|
if loader is None:
|
||||||
tkMessageBox.showerror("Unsupported type",
|
tkMessageBox.showerror("Import error", "module not found",
|
||||||
"%s is not a source module" % name, parent=self.text)
|
parent=self.text)
|
||||||
|
return
|
||||||
|
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
|
return
|
||||||
if f:
|
|
||||||
f.close()
|
|
||||||
if self.flist:
|
if self.flist:
|
||||||
self.flist.open(file)
|
self.flist.open(file_path)
|
||||||
else:
|
else:
|
||||||
self.io.loadfile(file)
|
self.io.loadfile(file_path)
|
||||||
|
|
||||||
def open_class_browser(self, event=None):
|
def open_class_browser(self, event=None):
|
||||||
filename = self.io.filename
|
filename = self.io.filename
|
||||||
|
|
|
@ -435,6 +435,8 @@ C-API
|
||||||
IDLE
|
IDLE
|
||||||
----
|
----
|
||||||
|
|
||||||
|
- Issue #18055: Move IDLE off of imp and on to importlib.
|
||||||
|
|
||||||
- Issue #15392: Create a unittest framework for IDLE.
|
- Issue #15392: Create a unittest framework for IDLE.
|
||||||
Initial patch by Rajagopalasarma Jayakrishnan.
|
Initial patch by Rajagopalasarma Jayakrishnan.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue