add option for delayed imports
will make setup checking easier, although it does not work for all cases (from imports for example) Change-Id: I2e5cf9b427a6f8e6f603d9662cdb9700d5f9ad9a Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/33893 Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de> Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch> Reviewed-by: Alexander Zaft <a.zaft@fz-juelich.de> Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
This commit is contained in:
@@ -419,3 +419,26 @@ def merge_status(*args):
|
||||
# use dict instead of set for preserving order
|
||||
merged = {m: True for mm in merged for m in mm.split(', ')}
|
||||
return maxcode, ', '.join(merged)
|
||||
|
||||
|
||||
class _Raiser:
|
||||
def __init__(self, modname):
|
||||
self.modname = modname
|
||||
|
||||
def __getattr__(self, name):
|
||||
# Just retry the import, it will give the most useful exception.
|
||||
__import__(self.modname)
|
||||
|
||||
def __bool__(self):
|
||||
return False
|
||||
|
||||
|
||||
def delayed_import(modname):
|
||||
"""Import a module, and return an object that raises a delayed exception
|
||||
on access if it failed.
|
||||
"""
|
||||
try:
|
||||
module = __import__(modname, None, None, ['*'])
|
||||
except Exception:
|
||||
return _Raiser(modname)
|
||||
return module
|
||||
|
||||
Reference in New Issue
Block a user