Commit 2dc55bc1 authored by Jason R. Coombs's avatar Jason R. Coombs

Combine separate VendorImporters into a single one in pkg_resources.extern

--HG--
branch : feature/issue-229
parent a76f5c03
......@@ -87,7 +87,6 @@ try:
except ImportError:
pass
from pkg_resources.extern import packaging
__import__('pkg_resources.extern.packaging.version')
__import__('pkg_resources.extern.packaging.specifiers')
......
import sys
class VendorImporter:
"""
A PEP 302 meta path importer for finding optionally-vendored
......
import sys
from pkg_resources.extern import VendorImporter
class VendorImporter:
"""
A PEP 302 meta path importer for finding optionally-vendored
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(self.root_name + '.')
if root:
return
if not any(map(target.startswith, self.vendored_names)):
return
return self
def load_module(self, fullname):
root, base, target = fullname.partition(self.root_name + '.')
for prefix in self.search_path:
try:
__import__(prefix + target)
mod = sys.modules[fullname] = sys.modules.pop(prefix + target)
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())
)
def install(self):
if self not in sys.meta_path:
sys.meta_path.append(self)
names = 'six',
VendorImporter(__name__, names).install()
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment