diff options
Diffstat (limited to 'setuptools')
| -rw-r--r-- | setuptools/extern/__init__.py | 42 | ||||
| -rw-r--r-- | setuptools/extern/six.py | 45 |
2 files changed, 42 insertions, 45 deletions
diff --git a/setuptools/extern/__init__.py b/setuptools/extern/__init__.py index e69de29b..803d9e9a 100644 --- a/setuptools/extern/__init__.py +++ b/setuptools/extern/__init__.py @@ -0,0 +1,42 @@ +import sys + +_VENDORED_NAMES = 'six', +_SEARCH_PATH = 'setuptools._vendor.', '' + +class VendorImporter: + """ + A PEP 302 meta path importer for finding optionally-vendored + or otherwise naturally-installed packages from __name__. + """ + def find_module(self, fullname, path=None): + root, base, target = fullname.partition(__name__ + '.') + if root: + return + if not any(map(target.startswith, _VENDORED_NAMES)): + return + return self + + def load_module(self, fullname): + root, base, target = fullname.partition(__name__ + '.') + for prefix in _SEARCH_PATH: + try: + __import__(prefix + target) + mod = sys.modules[prefix + target] + sys.modules[fullname] = mod + return mod + except ImportError: + pass + else: + raise ImportError( + "The '{target}' package is required; " + "normally this is bundled with this package so if you get " + "this warning, consult the packager of your " + "distribution.".format(**locals()) + ) + + @classmethod + def install(cls): + if not any(isinstance(imp, cls) for imp in sys.meta_path): + sys.meta_path.append(cls()) + +VendorImporter.install() diff --git a/setuptools/extern/six.py b/setuptools/extern/six.py deleted file mode 100644 index 6076c208..00000000 --- a/setuptools/extern/six.py +++ /dev/null @@ -1,45 +0,0 @@ -""" -Handle loading a package from system or from the bundled copy -""" - -import imp - - -_SEARCH_PATH = ['setuptools._vendor.six', 'six'] - - -def _find_module(name, path=None): - """ - Alternative to `imp.find_module` that can also search in subpackages. - """ - - parts = name.split('.') - - for part in parts: - if path is not None: - path = [path] - - fh, path, descr = imp.find_module(part, path) - - return fh, path, descr - - -def _import_in_place(search_path=_SEARCH_PATH): - for mod_name in search_path: - try: - mod_info = _find_module(mod_name) - except ImportError: - continue - - imp.load_module(__name__, *mod_info) - break - - else: - raise ImportError( - "The '{name}' package is required; " - "normally this is bundled with this package so if you get " - "this warning, consult the packager of your " - "distribution.".format(name=_SEARCH_PATH[-1])) - - -_import_in_place() |
