Commit 32d37421 authored by Senthil Kumaran's avatar Senthil Kumaran

[backport to 3.5] - issue26896 - Disambiguate uses of "importer" with "finder".

parent e848cd76
...@@ -207,13 +207,13 @@ Importing Modules ...@@ -207,13 +207,13 @@ Importing Modules
.. c:function:: PyObject* PyImport_GetImporter(PyObject *path) .. c:function:: PyObject* PyImport_GetImporter(PyObject *path)
Return an importer object for a :data:`sys.path`/:attr:`pkg.__path__` item Return a finder object for a :data:`sys.path`/:attr:`pkg.__path__` item
*path*, possibly by fetching it from the :data:`sys.path_importer_cache` *path*, possibly by fetching it from the :data:`sys.path_importer_cache`
dict. If it wasn't yet cached, traverse :data:`sys.path_hooks` until a hook dict. If it wasn't yet cached, traverse :data:`sys.path_hooks` until a hook
is found that can handle the path item. Return ``None`` if no hook could; is found that can handle the path item. Return ``None`` if no hook could;
this tells our caller it should fall back to the built-in import mechanism. this tells our caller that the :term:`path based finder` could not find a
Cache the result in :data:`sys.path_importer_cache`. Return a new reference finder for this path item. Cache the result in :data:`sys.path_importer_cache`.
to the importer object. Return a new reference to the finder object.
.. c:function:: void _PyImport_Init() .. c:function:: void _PyImport_Init()
......
...@@ -45,7 +45,7 @@ def read_code(stream): ...@@ -45,7 +45,7 @@ def read_code(stream):
def walk_packages(path=None, prefix='', onerror=None): def walk_packages(path=None, prefix='', onerror=None):
"""Yields (module_loader, name, ispkg) for all modules recursively """Yields (module_finder, name, ispkg) for all modules recursively
on path, or, if path is None, all accessible modules. on path, or, if path is None, all accessible modules.
'path' should be either None or a list of paths to look for 'path' should be either None or a list of paths to look for
...@@ -102,7 +102,7 @@ def walk_packages(path=None, prefix='', onerror=None): ...@@ -102,7 +102,7 @@ def walk_packages(path=None, prefix='', onerror=None):
def iter_modules(path=None, prefix=''): def iter_modules(path=None, prefix=''):
"""Yields (module_loader, name, ispkg) for all submodules on path, """Yields (module_finder, name, ispkg) for all submodules on path,
or, if path is None, all top-level modules on sys.path. or, if path is None, all top-level modules on sys.path.
'path' should be either None or a list of paths to look for 'path' should be either None or a list of paths to look for
...@@ -184,10 +184,10 @@ def _import_imp(): ...@@ -184,10 +184,10 @@ def _import_imp():
imp = importlib.import_module('imp') imp = importlib.import_module('imp')
class ImpImporter: class ImpImporter:
"""PEP 302 Importer that wraps Python's "classic" import algorithm """PEP 302 Finder that wraps Python's "classic" import algorithm
ImpImporter(dirname) produces a PEP 302 importer that searches that ImpImporter(dirname) produces a PEP 302 finder that searches that
directory. ImpImporter(None) produces a PEP 302 importer that searches directory. ImpImporter(None) produces a PEP 302 finder that searches
the current sys.path, plus any modules that are frozen or built-in. the current sys.path, plus any modules that are frozen or built-in.
Note that ImpImporter does not currently support being used by placement Note that ImpImporter does not currently support being used by placement
...@@ -397,7 +397,7 @@ except ImportError: ...@@ -397,7 +397,7 @@ except ImportError:
def get_importer(path_item): def get_importer(path_item):
"""Retrieve a finder for the given path item """Retrieve a finder for the given path item
The returned importer is cached in sys.path_importer_cache The returned finder is cached in sys.path_importer_cache
if it was newly created by a path hook. if it was newly created by a path hook.
The cache (or part of it) can be cleared manually if a The cache (or part of it) can be cleared manually if a
...@@ -421,14 +421,14 @@ def get_importer(path_item): ...@@ -421,14 +421,14 @@ def get_importer(path_item):
def iter_importers(fullname=""): def iter_importers(fullname=""):
"""Yield finders for the given module name """Yield finders for the given module name
If fullname contains a '.', the importers will be for the package If fullname contains a '.', the finders will be for the package
containing fullname, otherwise they will be all registered top level containing fullname, otherwise they will be all registered top level
importers (i.e. those on both sys.meta_path and sys.path_hooks). finders (i.e. those on both sys.meta_path and sys.path_hooks).
If the named module is in a package, that package is imported as a side If the named module is in a package, that package is imported as a side
effect of invoking this function. effect of invoking this function.
If no module name is specified, all top level importers are produced. If no module name is specified, all top level finders are produced.
""" """
if fullname.startswith('.'): if fullname.startswith('.'):
msg = "Relative module name {!r} not supported".format(fullname) msg = "Relative module name {!r} not supported".format(fullname)
......
...@@ -98,7 +98,7 @@ def _run_module_code(code, init_globals=None, ...@@ -98,7 +98,7 @@ def _run_module_code(code, init_globals=None,
# may be cleared when the temporary module goes away # may be cleared when the temporary module goes away
return mod_globals.copy() return mod_globals.copy()
# Helper to get the loader, code and filename for a module # Helper to get the full name, spec and code for a module
def _get_module_details(mod_name, error=ImportError): def _get_module_details(mod_name, error=ImportError):
if mod_name.startswith("."): if mod_name.startswith("."):
raise error("Relative module names not supported") raise error("Relative module names not supported")
...@@ -262,7 +262,7 @@ def run_path(path_name, init_globals=None, run_name=None): ...@@ -262,7 +262,7 @@ def run_path(path_name, init_globals=None, run_name=None):
return _run_module_code(code, init_globals, run_name, return _run_module_code(code, init_globals, run_name,
pkg_name=pkg_name, script_name=fname) pkg_name=pkg_name, script_name=fname)
else: else:
# Importer is defined for path, so add it to # Finder is defined for path, so add it to
# the start of sys.path # the start of sys.path
sys.path.insert(0, path_name) sys.path.insert(0, path_name)
try: try:
......
...@@ -76,7 +76,6 @@ class CallSignature: ...@@ -76,7 +76,6 @@ class CallSignature:
self.__import__(mod_name) self.__import__(mod_name)
assert len(log) == 1 assert len(log) == 1
args = log[0][0] args = log[0][0]
kwargs = log[0][1]
# Assuming all arguments are positional. # Assuming all arguments are positional.
self.assertEqual(args[0], mod_name) self.assertEqual(args[0], mod_name)
self.assertIsNone(args[1]) self.assertIsNone(args[1])
......
...@@ -266,7 +266,6 @@ class mock_spec(_ImporterMock): ...@@ -266,7 +266,6 @@ class mock_spec(_ImporterMock):
module = self.modules[fullname] module = self.modules[fullname]
except KeyError: except KeyError:
return None return None
is_package = hasattr(module, '__path__')
spec = util.spec_from_file_location( spec = util.spec_from_file_location(
fullname, module.__file__, loader=self, fullname, module.__file__, loader=self,
submodule_search_locations=getattr(module, '__path__', None)) submodule_search_locations=getattr(module, '__path__', None))
......
...@@ -205,7 +205,7 @@ class PkgutilPEP302Tests(unittest.TestCase): ...@@ -205,7 +205,7 @@ class PkgutilPEP302Tests(unittest.TestCase):
del sys.meta_path[0] del sys.meta_path[0]
def test_getdata_pep302(self): def test_getdata_pep302(self):
# Use a dummy importer/loader # Use a dummy finder/loader
self.assertEqual(pkgutil.get_data('foo', 'dummy'), "Hello, world!") self.assertEqual(pkgutil.get_data('foo', 'dummy'), "Hello, world!")
del sys.modules['foo'] del sys.modules['foo']
......
...@@ -990,6 +990,7 @@ Damien Miller ...@@ -990,6 +990,7 @@ Damien Miller
Jason V. Miller Jason V. Miller
Jay T. Miller Jay T. Miller
Katie Miller Katie Miller
Oren Milman
Roman Milner Roman Milner
Julien Miotte Julien Miotte
Andrii V. Mishkovskyi Andrii V. Mishkovskyi
......
...@@ -960,12 +960,13 @@ is_builtin(PyObject *name) ...@@ -960,12 +960,13 @@ is_builtin(PyObject *name)
} }
/* Return an importer object for a sys.path/pkg.__path__ item 'p', /* Return a finder object for a sys.path/pkg.__path__ item 'p',
possibly by fetching it from the path_importer_cache dict. If it possibly by fetching it from the path_importer_cache dict. If it
wasn't yet cached, traverse path_hooks until a hook is found wasn't yet cached, traverse path_hooks until a hook is found
that can handle the path item. Return None if no hook could; that can handle the path item. Return None if no hook could;
this tells our caller it should fall back to the builtin this tells our caller that the path based finder could not find
import mechanism. Cache the result in path_importer_cache. a finder for this path item. Cache the result in
path_importer_cache.
Returns a borrowed reference. */ Returns a borrowed reference. */
static PyObject * static PyObject *
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment