[VVP] Adding preload generation functionality
[vvp/validation-scripts.git] / ice_validator / tests / helpers.py
index c73a118..ff82c71 100644 (file)
@@ -47,7 +47,16 @@ from collections import defaultdict
 from boltons import funcutils
 from tests import cached_yaml as yaml
 
-VERSION = "1.1.0"
+__path__ = [os.path.dirname(os.path.abspath(__file__))]
+DEFAULT_OUTPUT_DIR = "{}/../output".format(__path__[0])
+RE_BASE = re.compile(r"(^base$)|(^base_)|(_base_)|(_base$)")
+
+
+def is_base_module(template_path):
+    basename = os.path.basename(template_path).lower()
+    name, extension = os.path.splitext(basename)
+    is_yaml = extension in {".yml", ".yaml"}
+    return is_yaml and RE_BASE.search(name) and not name.endswith("_volume")
 
 
 def check_basename_ending(template_type, basename):
@@ -218,7 +227,7 @@ def traverse(data, search_key, func, path=None):
     elif isinstance(data, list):
         for value in data:
             curr_path = path + [value]
-            if isinstance(value, dict):
+            if isinstance(value, (dict, list)):
                 traverse(value, search_key, func, curr_path)
             elif value == search_key:
                 func(curr_path, value)
@@ -262,9 +271,6 @@ def check_indices(pattern, values, value_type):
     return invalid_params
 
 
-RE_BASE = re.compile(r"(^base$)|(^base_)|(_base_)|(_base$)")
-
-
 def get_base_template_from_yaml_files(yaml_files):
     """Return first filepath to match RE_BASE
     """
@@ -324,3 +330,29 @@ def prop_iterator(resource, *props):
                 yield from prop_iterator(x, *props)
         elif isinstance(prop, dict):
             yield from prop_iterator(prop, *props)
+
+
+def get_param(property_value):
+    """
+    Returns the first parameter name from a get_param or None if get_param is
+    not used
+    """
+    if property_value and isinstance(property_value, dict):
+        param = property_value.get("get_param")
+        if param and isinstance(param, list) and len(param) > 0:
+            return param[0]
+        else:
+            return param
+    return None
+
+
+def get_output_dir(config):
+    """
+    Retrieve the output directory for the reports and create it if necessary
+    :param config: pytest configuration
+    :return: output directory as string
+    """
+    output_dir = config.option.output_dir or DEFAULT_OUTPUT_DIR
+    if not os.path.exists(output_dir):
+        os.makedirs(output_dir, exist_ok=True)
+    return output_dir