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 <eskultet@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
Erik Skultety 2023-08-24 10:28:55 +02:00
parent a35b4e4e97
commit 05d65767cf
1 changed files with 22 additions and 0 deletions

View File

@ -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