diff options
author | Jason R. Coombs <jaraco@jaraco.com> | 2016-01-02 14:31:19 -0500 |
---|---|---|
committer | Jason R. Coombs <jaraco@jaraco.com> | 2016-01-02 14:31:19 -0500 |
commit | 6116800a211a42fa662083897d5b8e690b3f4ae3 (patch) | |
tree | d134f5beb02407783a4024f26468cd8af6296452 /pkg_resources | |
parent | 1aafa9ca06881c5c90577fc4449c41ef692c5220 (diff) | |
download | python-setuptools-bitbucket-6116800a211a42fa662083897d5b8e690b3f4ae3.tar.gz |
Make VendorImporter more generic
Diffstat (limited to 'pkg_resources')
-rw-r--r-- | pkg_resources/extern/__init__.py | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/pkg_resources/extern/__init__.py b/pkg_resources/extern/__init__.py index 3b3076c0..17a582ea 100644 --- a/pkg_resources/extern/__init__.py +++ b/pkg_resources/extern/__init__.py @@ -1,24 +1,31 @@ import sys -_VENDORED_NAMES = 'packaging', -_SEARCH_PATH = 'pkg_resources._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 = 'packaging', +VendorImporter(__name__, names).install() |