summaryrefslogtreecommitdiff
path: root/setuptools/extern/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'setuptools/extern/__init__.py')
-rw-r--r--setuptools/extern/__init__.py33
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()