[VVP] Fixed issue in unused parameter detection
[vvp/validation-scripts.git] / ice_validator / tests / helpers.py
index afa8672..6a6fb73 100644 (file)
@@ -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)
@@ -310,17 +310,31 @@ def parameter_type_to_heat_type(parameter):
 
 
 def prop_iterator(resource, *props):
-    terminators = ["get_resource", "get_attr", "str_replace"]
+    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 "get_param" in resource:
-        yield resource.get("get_param")
+    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) and not any(x for x in terminators if x in prop):
+        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