summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason R. Coombs <jaraco@jaraco.com>2016-01-02 14:31:19 -0500
committerJason R. Coombs <jaraco@jaraco.com>2016-01-02 14:31:19 -0500
commit6116800a211a42fa662083897d5b8e690b3f4ae3 (patch)
treed134f5beb02407783a4024f26468cd8af6296452
parent1aafa9ca06881c5c90577fc4449c41ef692c5220 (diff)
downloadpython-setuptools-bitbucket-6116800a211a42fa662083897d5b8e690b3f4ae3.tar.gz
Make VendorImporter more generic
-rw-r--r--pkg_resources/extern/__init__.py33
-rw-r--r--setuptools/extern/__init__.py33
2 files changed, 40 insertions, 26 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()
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()