[libvirt PATCH v2 26/35] ci: helper: Add a required_deps higher order helper/decorator

Erik Skultety eskultet at redhat.com
Mon Sep 11 13:43:27 UTC 2023


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 at redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange at redhat.com>
Erik Skultety <eskultet at redhat.com>:
---
 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
-- 
2.41.0



More information about the libvir-list mailing list