diff options
Diffstat (limited to 'setuptools/extern/__init__.py')
-rw-r--r-- | setuptools/extern/__init__.py | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/setuptools/extern/__init__.py b/setuptools/extern/__init__.py index 803d9e9a..1329285c 100644 --- a/setuptools/extern/__init__.py +++ b/setuptools/extern/__init__.py @@ -1,24 +1,31 @@ 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__. + or otherwise naturally-installed packages from root_name. """ + def __init__(self, root_name, vendored_names=(), vendor_pkg=None): + self.root_name = root_name + self.vendored_names = set(vendored_names) + self.vendor_pkg = vendor_pkg or root_name.replace('extern', '_vendor') + + @property + def search_path(self): + yield self.vendor_pkg + '.' + yield '' + def find_module(self, fullname, path=None): - root, base, target = fullname.partition(__name__ + '.') + root, base, target = fullname.partition(self.root_name + '.') if root: return - if not any(map(target.startswith, _VENDORED_NAMES)): + if not any(map(target.startswith, self.vendored_names)): return return self def load_module(self, fullname): - root, base, target = fullname.partition(__name__ + '.') - for prefix in _SEARCH_PATH: + root, base, target = fullname.partition(self.root_name + '.') + for prefix in self.search_path: try: __import__(prefix + target) mod = sys.modules[prefix + target] @@ -34,9 +41,9 @@ class VendorImporter: "distribution.".format(**locals()) ) - @classmethod - def install(cls): - if not any(isinstance(imp, cls) for imp in sys.meta_path): - sys.meta_path.append(cls()) + def install(self): + if self not in sys.meta_path: + sys.meta_path.append(self) -VendorImporter.install() +names = 'six', +VendorImporter(__name__, names).install() |