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&