in rostran/providers/cloudformation/template.py [0:0]
def _handle_props_and_value(self, data, names: list, value, rule_id, _name_path=""):
if not names:
return
name = names[0]
if name.isdigit():
name = int(name)
_name_path = f"{_name_path}.{name}" if _name_path else f"{name}"
if len(names) == 1:
if name == "__single_to_multi_handler__":
if value:
data.update(value)
else:
try:
data[name] = value
except IndexError:
if name != len(data):
raise InvalidRuleSchema(
path=rule_id,
reason=f"{_name_path} is invalid. The index should be {len(data)}",
)
data.append(value)
else:
default_sub_data = [] if names[1].isdigit() else {}
try:
sub_data = data[name]
except KeyError:
sub_data = data[name] = default_sub_data
except IndexError:
if name != len(data):
raise InvalidRuleSchema(
path=rule_id,
reason=f"{_name_path} is invalid. The index should be {len(data)}",
)
data.append(default_sub_data)
sub_data = default_sub_data
self._handle_props_and_value(sub_data, names[1:], value, _name_path)