[VVP] Fixed issue in unused parameter detection
[vvp/validation-scripts.git] / ice_validator / tests / helpers.py
index 0b33c0c..6a6fb73 100644 (file)
 #
 # ============LICENSE_END============================================
 #
-# ECOMP is a trademark and service mark of AT&T Intellectual Property.
 #
 
 """Helpers
 """
 
 import os
+import re
 from collections import defaultdict
 
 from boltons import funcutils
@@ -218,7 +218,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)
@@ -260,3 +260,81 @@ def check_indices(pattern, values, value_type):
                 ).format(value_type, prefix, indices)
             )
     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
+    """
+    for filepath in yaml_files:
+        basename = get_base_template_from_yaml_file(filepath)
+        if basename:
+            return basename
+    return None
+
+
+def get_base_template_from_yaml_file(yaml_file):
+    (dirname, filename) = os.path.split(yaml_file)
+    files = os.listdir(dirname)
+    for file in files:
+        basename, __ = os.path.splitext(os.path.basename(file))
+        if (
+            (__ == ".yaml" or __ == ".yml")
+            and RE_BASE.search(basename)
+            and basename.find("volume") == -1
+        ):
+            return os.path.join(dirname, "{}{}".format(basename, __))
+    return None
+
+
+def parameter_type_to_heat_type(parameter):
+    # getting parameter format
+    if isinstance(parameter, list):
+        parameter_type = "comma_delimited_list"
+    elif isinstance(parameter, str):
+        parameter_type = "string"
+    elif isinstance(parameter, dict):
+        parameter_type = "json"
+    elif isinstance(parameter, int):
+        parameter_type = "number"
+    elif isinstance(parameter, float):
+        parameter_type = "number"
+    elif isinstance(parameter, bool):
+        parameter_type = "boolean"
+    else:
+        parameter_type = None
+
+    return parameter_type
+
+
+def prop_iterator(resource, *props):
+    terminators = ["get_resource", "get_attr", "str_replace", "get_param"]
+    if "properties" in resource:
+        resource = resource.get("properties")
+    props = list(props)
+
+    if isinstance(resource, dict) and any(x for x in terminators if x in resource):
+        yield resource
+    else:
+        prop = resource.get(props.pop(0))
+        if isinstance(prop, list):
+            for x in prop:
+                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