From: Erik Skultety Date: Thu, 24 Aug 2023 08:28:55 +0000 (+0200) Subject: ci: helper: Add a required_deps higher order helper/decorator X-Git-Tag: v9.8.0-rc1~112 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=05d65767cfa189166962353ed9a48c612e157ed6;p=thirdparty%2Flibvirt.git ci: helper: Add a required_deps higher order helper/decorator Since we'll depend on GitPython for repo cloning, we need to make sure to emit a user friendly error if the module is not installed. This patch introduces a helper which future patches will use as a decorator. Inspiration for this helper has been taken out of lcitool where we use an identical helper for this purpose. Signed-off-by: Erik Skultety Reviewed-by: Daniel P. Berrangé --- diff --git a/ci/helper b/ci/helper index 75552774f6..4727145b28 100755 --- a/ci/helper +++ b/ci/helper @@ -14,6 +14,28 @@ import textwrap import util +def required_deps(*deps): + module2pkg = { + "git": "GitPython" + } + + def inner_decorator(func): + def wrapped(*args, **kwargs): + cmd = func.__name__[len('_action_'):] + for dep in deps: + try: + import importlib + importlib.import_module(dep) + except ImportError: + pkg = module2pkg[dep] + msg = f"'{pkg}' not found (required by the '{cmd}' command)" + print(msg, file=sys.stderr) + sys.exit(1) + func(*args, **kwargs) + return wrapped + return inner_decorator + + class Parser: def __init__(self): # Options that are common to all actions that use containers