in src/cfnlint/template.py [0:0]
def _get_sub_resource_properties(self, keys, properties, path):
"""Used for recursive handling of properties in the keys"""
LOGGER.debug('Get Sub Resource Properties from %s', keys)
if not keys:
result = {}
result['Path'] = path
result['Value'] = properties
return [result]
if isinstance(properties, dict):
key = keys.pop(0)
for key_name, key_value in properties.items():
if key_name == key:
results = self._get_sub_resource_properties(
keys[:], key_value, path[:] + [key_name])
if results:
return results
elif isinstance(properties, list):
matches = []
for index, item in enumerate(properties):
results = None
if isinstance(item, dict):
if len(item) == 1:
for sub_key, sub_value in item.items():
if sub_key in cfnlint.helpers.CONDITION_FUNCTIONS:
cond_values = self.get_condition_values(sub_value)
results = []
for cond_value in cond_values:
result_path = path[:] + [index, sub_key] + cond_value['Path']
results.extend(
self._get_sub_resource_properties(
keys[:], cond_value['Value'], result_path))
elif sub_key == 'Ref':
if sub_value != 'AWS::NoValue':
results = self._get_sub_resource_properties(
keys[:], sub_value, path + [sub_key])
else:
results = self._get_sub_resource_properties(
keys[:], sub_value, path + [sub_key])
else:
results = self._get_sub_resource_properties(keys[:], item, path + [index])
if isinstance(results, dict):
matches.append(results)
elif isinstance(results, list):
matches.extend(results)
return matches
return []