diff --git a/Lib/imp.py b/Lib/imp.py
--- a/Lib/imp.py
+++ b/Lib/imp.py
@@ -14,12 +14,11 @@
from _imp import get_magic, get_tag
# Can (probably) move to importlib
from _imp import get_suffixes
-# Should be re-implemented here (and mostly deprecated)
-from _imp import NullImporter
from importlib._bootstrap import _new_module as new_module
from importlib._bootstrap import _cache_from_source as cache_from_source
+import importlib.abc
from importlib import _bootstrap
import os
import sys
@@ -194,3 +193,16 @@
encoding = tokenize.detect_encoding(file.readline)[0]
file = open(file_path, mode, encoding=encoding)
return file, file_path, (suffix, mode, type_)
+
+
+class NullImporter(importlib.abc.Finder):
+
+ def __init__(self, path):
+ if len(path) == 0:
+ raise ImportError('empty pathname', path=path)
+ elif os.path.isdir(path):
+ raise ImportError('existing directory', path=path)
+
+ def find_module(self, fullname, path=None):
+ return None
+
diff --git a/Lib/importlib/__init__.py b/Lib/importlib/__init__.py
--- a/Lib/importlib/__init__.py
+++ b/Lib/importlib/__init__.py
@@ -23,7 +23,7 @@
def invalidate_caches():
"""Call the invalidate_caches() method on all finders stored in
- sys.path_importer_caches (where implemented)."""
+ sys.path_importer_cache (where implemented)."""
for finder in sys.path_importer_cache.values():
if hasattr(finder, 'invalidate_caches'):
finder.invalidate_caches()
diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py
--- a/Lib/importlib/_bootstrap.py
+++ b/Lib/importlib/_bootstrap.py
@@ -744,50 +744,34 @@
"""Meta path finder for sys.(path|path_hooks|path_importer_cache)."""
- @classmethod
- def _path_hooks(cls, path, hooks=None):
- """Search sequence of hooks for a finder for 'path'.
-
- If 'hooks' is false then use sys.path_hooks.
-
- """
- if hooks is None:
- hooks = sys.path_hooks
- for hook in hooks:
+ @staticmethod
+ def _path_hooks(path):
+ """Search sys.path_hooks for a finder for 'path', returning None if
+ nothing is found."""
+ for hook in sys.path_hooks:
try:
return hook(path)
except ImportError:
continue
else:
- raise ImportError("no path hook found for {0}".format(path),
- path=path)
+ return None
@classmethod
- def _path_importer_cache(cls, path, default=None):
+ def _path_importer_cache(cls, path):
"""Get the finder for the path from sys.path_importer_cache.
- If the path is not in the cache, find the appropriate finder and cache
- it. If None is cached, get the default finder and cache that
- (if applicable).
-
- Because of NullImporter, some finder should be returned. The only
- explicit fail case is if None is cached but the path cannot be used for
- the default hook, for which ImportError is raised.
+ If the path is not in the cache, find the appropriate finder (which can
+ by None) and cache it.
"""
if path == '':
path = '.'
try:
- finder = sys.path_importer_cache[path]
+ return sys.path_importer_cache[path]
except KeyError:
finder = cls._path_hooks(path)
sys.path_importer_cache[path] = finder
- else:
- if finder is None and default:
- # Raises ImportError on failure.
- finder = default(path)
- sys.path_importer_cache[path] = finder
- return finder
+ return finder
@classmethod
def find_module(cls, fullname, path=None):
@@ -800,7 +784,7 @@
finder = cls._path_importer_cache(entry)
except ImportError:
continue
- if finder:
+ if finder is not None:
loader = finder.find_module(fullname)
if loader:
return loader
@@ -937,7 +921,7 @@
try:
return super()._path_hooks(path)
except ImportError:
- implicit_hooks = [_DEFAULT_PATH_HOOK, _imp.NullImporter]
+ implicit_hooks = [_DEFAULT_PATH_HOOK]
return super()._path_hooks(path, implicit_hooks)
@classmethod
@@ -971,8 +955,7 @@
def _find_module(name, path):
"""Find a module's loader."""
- meta_path = sys.meta_path + _IMPLICIT_META_PATH
- for finder in meta_path:
+ for finder in sys.meta_path:
loader = finder.find_module(name, path)
if loader is not None:
# The parent import may have already imported this module.
@@ -1001,8 +984,6 @@
raise ValueError("Empty module name")
-_IMPLICIT_META_PATH = [BuiltinImporter, FrozenImporter, _DefaultPathFinder]
-
_ERR_MSG = 'No module named {!r}'
def _find_and_load(name, import_):
@@ -1199,8 +1180,8 @@
supported_loaders = [(ExtensionFileLoader, _suffix_list(3), False),
(SourceFileLoader, _suffix_list(1), True),
(_SourcelessFileLoader, _suffix_list(2), True)]
- setattr(self_module, '_DEFAULT_PATH_HOOK',
- FileFinder.path_hook(*supported_loaders))
+ sys_module.meta_path.extend([BuiltinImporter, FrozenImporter, PathFinder])
+ sys_module.path_hooks.append(FileFinder.path_hook(*supported_loaders))
def _install(sys_module, _imp_module):
diff --git a/Lib/importlib/test/import_/test_path.py b/Lib/importlib/test/import_/test_path.py
--- a/Lib/importlib/test/import_/test_path.py
+++ b/Lib/importlib/test/import_/test_path.py
@@ -30,7 +30,7 @@
with util.import_state(path_importer_cache={path: importer},
path=[path]):
loader = machinery.PathFinder.find_module(module)
- self.assertTrue(loader is importer)
+ self.assertIs(loader, importer)
def test_path(self):
# Test that 'path' is used when set.
@@ -40,7 +40,7 @@
importer = util.mock_modules(module)
with util.import_state(path_importer_cache={path: importer}):
loader = machinery.PathFinder.find_module(module, [path])
- self.assertTrue(loader is importer)
+ self.assertIs(loader, importer)
def test_empty_list(self):
# An empty list should not count as asking for sys.path.
@@ -80,7 +80,7 @@
with util.import_state(path=['1', '2'],
path_importer_cache={'1': None, '2': importer}):
loader = machinery.PathFinder.find_module(module)
- self.assertTrue(loader is importer)
+ self.assertIs(loader, importer)
def test_path_importer_cache_empty_string(self):
# The empty string should create a finder using the cwd.
@@ -94,57 +94,9 @@
self.assertIn(os.curdir, sys.path_importer_cache)
-class DefaultPathFinderTests(unittest.TestCase):
-
- """Test _bootstrap._DefaultPathFinder."""
-
- def test_implicit_hooks(self):
- # Test that the implicit path hooks are used.
- bad_path = ''
- module = ''
- assert not os.path.exists(bad_path)
- existing_path = tempfile.mkdtemp()
- try:
- with util.import_state():
- nothing = _bootstrap._DefaultPathFinder.find_module(module,
- path=[existing_path])
- self.assertTrue(nothing is None)
- self.assertTrue(existing_path in sys.path_importer_cache)
- result = isinstance(sys.path_importer_cache[existing_path],
- imp.NullImporter)
- self.assertFalse(result)
- nothing = _bootstrap._DefaultPathFinder.find_module(module,
- path=[bad_path])
- self.assertTrue(nothing is None)
- self.assertTrue(bad_path in sys.path_importer_cache)
- self.assertTrue(isinstance(sys.path_importer_cache[bad_path],
- imp.NullImporter))
- finally:
- os.rmdir(existing_path)
-
-
- def test_path_importer_cache_has_None(self):
- # Test that the default hook is used when sys.path_importer_cache
- # contains None for a path.
- module = ''
- importer = util.mock_modules(module)
- path = ''
- # XXX Not blackbox.
- original_hook = _bootstrap._DEFAULT_PATH_HOOK
- mock_hook = import_util.mock_path_hook(path, importer=importer)
- _bootstrap._DEFAULT_PATH_HOOK = mock_hook
- try:
- with util.import_state(path_importer_cache={path: None}):
- loader = _bootstrap._DefaultPathFinder.find_module(module,
- path=[path])
- self.assertTrue(loader is importer)
- finally:
- _bootstrap._DEFAULT_PATH_HOOK = original_hook
-
-
def test_main():
from test.support import run_unittest
- run_unittest(FinderTests, DefaultPathFinderTests)
+ run_unittest(FinderTests)
if __name__ == '__main__':
test_main()
diff --git a/Lib/runpy.py b/Lib/runpy.py
--- a/Lib/runpy.py
+++ b/Lib/runpy.py
@@ -198,10 +198,6 @@
try:
importer = cache[path_name]
except KeyError:
- # Not yet cached. Flag as using the
- # standard machinery until we finish
- # checking the hooks
- cache[path_name] = None
for hook in sys.path_hooks:
try:
importer = hook(path_name)
@@ -209,14 +205,7 @@
except ImportError:
pass
else:
- # The following check looks a bit odd. The trick is that
- # NullImporter throws ImportError if the supplied path is a
- # *valid* directory entry (and hence able to be handled
- # by the standard import machinery)
- try:
- importer = imp.NullImporter(path_name)
- except ImportError:
- return None
+ importer = None
cache[path_name] = importer
return importer
@@ -243,7 +232,7 @@
if run_name is None:
run_name = ""
importer = _get_importer(path_name)
- if isinstance(importer, imp.NullImporter):
+ if importer is None:
# Not a valid sys.path entry, so run the code directly
# execfile() doesn't help as we want to allow compiled files
code = _get_code_from_file(path_name)
diff --git a/Modules/main.c b/Modules/main.c
--- a/Modules/main.c
+++ b/Modules/main.c
@@ -224,7 +224,7 @@
if (importer == NULL)
goto error;
- if (importer->ob_type == &PyNullImporter_Type) {
+ if (importer == Py_None) {
Py_DECREF(argv0);
Py_DECREF(importer);
return -1;
diff --git a/Python/import.c b/Python/import.c
--- a/Python/import.c
+++ b/Python/import.c
@@ -205,9 +205,6 @@
PyObject *v, *path_hooks = NULL;
int err = 0;
- if (PyType_Ready(&PyNullImporter_Type) < 0)
- goto error;
-
/* adding sys.path_hooks and sys.path_importer_cache */
v = PyList_New(0);
if (v == NULL)
@@ -231,7 +228,7 @@
error:
PyErr_Print();
Py_FatalError("initializing sys.meta_path, sys.path_hooks, "
- "path_importer_cache, or NullImporter failed"
+ "or path_importer_cache failed"
);
}
Py_DECREF(path_hooks);
@@ -268,8 +265,8 @@
"# can't import zipimport.zipimporter\n");
}
else {
- /* sys.path_hooks.append(zipimporter) */
- err = PyList_Append(path_hooks, zipimporter);
+ /* sys.path_hooks.insert(0, zipimporter) */
+ err = PyList_Insert(path_hooks, 0, zipimporter);
Py_DECREF(zipimporter);
if (err < 0) {
goto error;
@@ -284,7 +281,7 @@
error:
PyErr_Print();
- Py_FatalError("initializing zipimport or NullImporter failed");
+ Py_FatalError("initializing zipimport failed");
}
/* Locking primitives to prevent parallel imports of the same module
@@ -1185,15 +1182,7 @@
PyErr_Clear();
}
if (importer == NULL) {
- importer = PyObject_CallFunctionObjArgs(
- (PyObject *)&PyNullImporter_Type, p, NULL
- );
- if (importer == NULL) {
- if (PyErr_ExceptionMatches(PyExc_ImportError)) {
- PyErr_Clear();
- return Py_None;
- }
- }
+ return Py_None;
}
if (importer != NULL) {
int err = PyDict_SetItem(path_importer_cache, p, importer);
@@ -2251,133 +2240,6 @@
return err;
}
-typedef struct {
- PyObject_HEAD
-} NullImporter;
-
-static int
-NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
-{
-#ifndef MS_WINDOWS
- PyObject *path;
- struct stat statbuf;
- int rv;
-
- if (!_PyArg_NoKeywords("NullImporter()", kwds))
- return -1;
-
- if (!PyArg_ParseTuple(args, "O&:NullImporter",
- PyUnicode_FSConverter, &path))
- return -1;
-
- if (PyBytes_GET_SIZE(path) == 0) {
- Py_DECREF(path);
- PyErr_SetString(PyExc_ImportError, "empty pathname");
- return -1;
- }
-
- rv = stat(PyBytes_AS_STRING(path), &statbuf);
- Py_DECREF(path);
- if (rv == 0) {
- /* it exists */
- if (S_ISDIR(statbuf.st_mode)) {
- /* it's a directory */
- PyErr_SetString(PyExc_ImportError, "existing directory");
- return -1;
- }
- }
-#else /* MS_WINDOWS */
- PyObject *pathobj;
- DWORD rv;
- wchar_t *path;
-
- if (!_PyArg_NoKeywords("NullImporter()", kwds))
- return -1;
-
- if (!PyArg_ParseTuple(args, "U:NullImporter",
- &pathobj))
- return -1;
-
- if (PyUnicode_GET_LENGTH(pathobj) == 0) {
- PyErr_SetString(PyExc_ImportError, "empty pathname");
- return -1;
- }
-
- path = PyUnicode_AsWideCharString(pathobj, NULL);
- if (path == NULL)
- return -1;
- /* see issue1293 and issue3677:
- * stat() on Windows doesn't recognise paths like
- * "e:\\shared\\" and "\\\\whiterab-c2znlh\\shared" as dirs.
- */
- rv = GetFileAttributesW(path);
- PyMem_Free(path);
- if (rv != INVALID_FILE_ATTRIBUTES) {
- /* it exists */
- if (rv & FILE_ATTRIBUTE_DIRECTORY) {
- /* it's a directory */
- PyErr_SetString(PyExc_ImportError, "existing directory");
- return -1;
- }
- }
-#endif
- return 0;
-}
-
-static PyObject *
-NullImporter_find_module(NullImporter *self, PyObject *args)
-{
- Py_RETURN_NONE;
-}
-
-static PyMethodDef NullImporter_methods[] = {
- {"find_module", (PyCFunction)NullImporter_find_module, METH_VARARGS,
- "Always return None"
- },
- {NULL} /* Sentinel */
-};
-
-
-PyTypeObject PyNullImporter_Type = {
- PyVarObject_HEAD_INIT(NULL, 0)
- "imp.NullImporter", /*tp_name*/
- sizeof(NullImporter), /*tp_basicsize*/
- 0, /*tp_itemsize*/
- 0, /*tp_dealloc*/
- 0, /*tp_print*/
- 0, /*tp_getattr*/
- 0, /*tp_setattr*/
- 0, /*tp_reserved*/
- 0, /*tp_repr*/
- 0, /*tp_as_number*/
- 0, /*tp_as_sequence*/
- 0, /*tp_as_mapping*/
- 0, /*tp_hash */
- 0, /*tp_call*/
- 0, /*tp_str*/
- 0, /*tp_getattro*/
- 0, /*tp_setattro*/
- 0, /*tp_as_buffer*/
- Py_TPFLAGS_DEFAULT, /*tp_flags*/
- "Null importer object", /* tp_doc */
- 0, /* tp_traverse */
- 0, /* tp_clear */
- 0, /* tp_richcompare */
- 0, /* tp_weaklistoffset */
- 0, /* tp_iter */
- 0, /* tp_iternext */
- NullImporter_methods, /* tp_methods */
- 0, /* tp_members */
- 0, /* tp_getset */
- 0, /* tp_base */
- 0, /* tp_dict */
- 0, /* tp_descr_get */
- 0, /* tp_descr_set */
- 0, /* tp_dictoffset */
- (initproc)NullImporter_init, /* tp_init */
- 0, /* tp_alloc */
- PyType_GenericNew /* tp_new */
-};
static struct PyModuleDef impmodule = {
PyModuleDef_HEAD_INIT,
@@ -2396,9 +2258,6 @@
{
PyObject *m, *d;
- if (PyType_Ready(&PyNullImporter_Type) < 0)
- return NULL;
-
m = PyModule_Create(&impmodule);
if (m == NULL)
goto failure;
@@ -2417,8 +2276,6 @@
if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
- Py_INCREF(&PyNullImporter_Type);
- PyModule_AddObject(m, "NullImporter", (PyObject *)&PyNullImporter_Type);
return m;
failure:
Py_XDECREF(m);
diff --git a/Python/importlib.h b/Python/importlib.h
index bc4c0d9638e4f8f252a80b871ad40a9fa85bf97e..b6357e8061cfbecf669b8bd3473ad17b0aac8829
GIT binary patch
literal 172278
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
G%l`-Xz$FI&