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