From 05d65767cfa189166962353ed9a48c612e157ed6 Mon Sep 17 00:00:00 2001 From: Erik Skultety Date: Thu, 24 Aug 2023 10:28:55 +0200 Subject: [PATCH] ci: helper: Add a required_deps higher order helper/decorator MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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é --- ci/helper | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) 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