From 37148b27ac742bc61087a8413863d70d43476bf4 Mon Sep 17 00:00:00 2001 From: Eric Snow Date: Sat, 4 Jan 2014 15:09:53 -0700 Subject: Issue #19708: Update pkgutil to use the new importer APIs. --- Lib/pkgutil.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'Lib/pkgutil.py') diff --git a/Lib/pkgutil.py b/Lib/pkgutil.py index 4682d22366c..405a03dc70f 100644 --- a/Lib/pkgutil.py +++ b/Lib/pkgutil.py @@ -16,6 +16,21 @@ __all__ = [ 'ImpImporter', 'ImpLoader', 'read_code', 'extend_path', ] + +def _get_spec(finder, name): + """Return the finder-specific module spec.""" + # Works with legacy finders. + try: + find_spec = finder.find_spec + except AttributeError: + loader = finder.find_module(name) + if loader is None: + return None + return importlib.util.spec_from_loader(name, loader) + else: + return find_spec(name) + + def read_code(stream): # This helper is needed in order for the PEP 302 emulation to # correctly handle compiled files @@ -326,9 +341,10 @@ class ImpLoader: self.source = self._get_delegate().get_source() return self.source - def _get_delegate(self): - return ImpImporter(self.filename).find_module('__init__') + finder = ImpImporter(self.filename) + spec = _get_spec(finder, '__init__') + return spec.loader def get_filename(self, fullname=None): fullname = self._fix_name(fullname) -- cgit v1.2.3