diff options
author | Jason R. Coombs <jaraco@jaraco.com> | 2019-10-27 19:50:53 -0400 |
---|---|---|
committer | Jason R. Coombs <jaraco@jaraco.com> | 2019-10-27 20:25:17 -0400 |
commit | 85a9ca5e75abf00e0dde55dde4e2b0a11f93c04a (patch) | |
tree | c1755a1d2a8e6d41231705efee5254786a9401f5 /setuptools/_imp.py | |
parent | f430e585d84a5c63bb3b52e17af2f1b40fec8b71 (diff) | |
download | external_python_setuptools-85a9ca5e75abf00e0dde55dde4e2b0a11f93c04a.tar.gz external_python_setuptools-85a9ca5e75abf00e0dde55dde4e2b0a11f93c04a.tar.bz2 external_python_setuptools-85a9ca5e75abf00e0dde55dde4e2b0a11f93c04a.zip |
Extract 'imp' re-implementation to setuptools._imp and wrap it in py27compat for compatibility.
Diffstat (limited to 'setuptools/_imp.py')
-rw-r--r-- | setuptools/_imp.py | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/setuptools/_imp.py b/setuptools/_imp.py new file mode 100644 index 00000000..6bc90243 --- /dev/null +++ b/setuptools/_imp.py @@ -0,0 +1,72 @@ +""" +Re-implementation of find_module and get_frozen_object +from the deprecated imp module. +""" + +import os +import importlib.util +import importlib.machinery + + +PY_SOURCE = 1 +PY_COMPILED = 2 +C_EXTENSION = 3 +C_BUILTIN = 6 +PY_FROZEN = 7 + + +def find_module(module, paths=None): + """ + """ + spec = importlib.util.find_spec(module, paths) + if spec is None: + raise ImportError("Can't find %s" % module) + if not spec.has_location and hasattr(spec, 'submodule_search_locations'): + spec = importlib.util.spec_from_loader('__init__.py', spec.loader) + + kind = -1 + file = None + static = isinstance(spec.loader, type) + if spec.origin == 'frozen' or static and issubclass( + spec.loader, importlib.machinery.FrozenImporter): + kind = PY_FROZEN + path = None # imp compabilty + suffix = mode = '' # imp compability + elif spec.origin == 'built-in' or static and issubclass( + spec.loader, importlib.machinery.BuiltinImporter): + kind = C_BUILTIN + path = None # imp compabilty + suffix = mode = '' # imp compability + elif spec.has_location: + path = spec.origin + suffix = os.path.splitext(path)[1] + mode = 'r' if suffix in importlib.machinery.SOURCE_SUFFIXES else 'rb' + + if suffix in importlib.machinery.SOURCE_SUFFIXES: + kind = PY_SOURCE + elif suffix in importlib.machinery.BYTECODE_SUFFIXES: + kind = PY_COMPILED + elif suffix in importlib.machinery.EXTENSION_SUFFIXES: + kind = C_EXTENSION + + if kind in {PY_SOURCE, PY_COMPILED}: + file = open(path, mode) + else: + path = None + suffix = mode = '' + + return file, path, (suffix, mode, kind) + + +def get_frozen_object(module, paths): + spec = importlib.util.find_spec(module, paths) + if hasattr(spec, 'submodule_search_locations'): + spec = importlib.util.spec_from_loader('__init__.py', spec.loader) + return spec.loader.get_code(module) + + +def get_module(module, paths, info): + spec = importlib.util.find_spec(module, paths) + if hasattr(spec, 'submodule_search_locations'): + spec = importlib.util.spec_from_loader('__init__.py', spec.loader) + return importlib.util.module_from_spec(spec) |