in src/cfnlint/template.py [0:0]
def get_value_from_scenario(self, obj, scenario):
"""
Get object values from a provided scenario
"""
def get_value(value, scenario): # pylint: disable=R0911
""" Get the value based on the scenario resolving nesting """
if isinstance(value, dict):
if len(value) == 1:
if 'Fn::If' in value:
if_values = value.get('Fn::If')
if len(if_values) == 3:
if_path = scenario.get(if_values[0], None)
if if_path is not None:
if if_path:
return get_value(if_values[1], scenario)
return get_value(if_values[2], scenario)
elif value.get('Ref') == 'AWS::NoValue':
return None
else:
return value
return value
if isinstance(value, list):
new_list = []
for item in value:
new_value = get_value(item, scenario)
if new_value is not None:
new_list.append(get_value(item, scenario))
return new_list
return value
result = cfnlint.dict_node({}, obj.start_mark, obj.end_mark)
if isinstance(obj, dict):
if len(obj) == 1:
if obj.get('Fn::If'):
new_value = get_value(obj, scenario)
if new_value is not None:
result = new_value
else:
for key, value in obj.items():
new_value = get_value(value, scenario)
if new_value is not None:
result[key] = new_value
else:
for key, value in obj.items():
new_value = get_value(value, scenario)
if new_value is not None:
result[key] = new_value
return result