freezer: work around Python modulefinder bug (bpo-35376)

This commit is contained in:
rdb 2018-12-02 16:26:22 +01:00
parent f2f4b4c264
commit 192913bf8e

View File

@ -2306,6 +2306,31 @@ class PandaModuleFinder(modulefinder.ModuleFinder):
self.msgout(2, "load_module ->", m)
return m
# This function is provided here since the Python library version has a bug
# (see bpo-35376)
def _safe_import_hook(self, name, caller, fromlist, level=-1):
# wrapper for self.import_hook() that won't raise ImportError
if name in self.badmodules:
self._add_badmodule(name, caller)
return
try:
self.import_hook(name, caller, level=level)
except ImportError as msg:
self.msg(2, "ImportError:", str(msg))
self._add_badmodule(name, caller)
else:
if fromlist:
for sub in fromlist:
fullname = name + "." + sub
if fullname in self.badmodules:
self._add_badmodule(fullname, caller)
continue
try:
self.import_hook(name, caller, [sub], level=level)
except ImportError as msg:
self.msg(2, "ImportError:", str(msg))
self._add_badmodule(fullname, caller)
def find_module(self, name, path=None, parent=None):
""" Finds a module with the indicated name on the given search path
(or self.path if None). Returns a tuple like (fp, path, stuff), where