in rostran/providers/cloudformation/template.py [0:0]
def _transform_value(self, value):
resolved = True
if isinstance(value, list):
data = []
for v in value:
v, resolved_v = self._transform_value(v)
if not resolved_v:
resolved = False
data.append(v)
return data, resolved
elif isinstance(value, dict):
data = {}
is_func = False
if len(value) == 1:
key = list(value.keys())[0]
function_rule: FunctionRule = self.rule_manager.function_rule
# transform func
if key in function_rule.function:
is_func = True
data.update(
self._transform_function(
key, value[key], function_rule.function[key]
)
)
elif re.match(r"^Fn::[\s\S]+$", key):
is_func = True
typer.secho(
f" Function {key!r} is not supported and will be ignored.",
fg="yellow",
)
data.update(value)
if not is_func:
for k, v in value.items():
val, resolved_val = self._transform_value(v)
data[k] = val
if not resolved_val:
resolved = False
else:
resolved = False
return data, resolved
elif isinstance(value, str):
pseudo_parameters_rule: PseudoParametersRule = (
self.rule_manager.pseudo_parameters_rule
)
if value in pseudo_parameters_rule.pseudo_parameters:
return (
self._transform_pseudo_parameter(
value, pseudo_parameters_rule.pseudo_parameters[value]
),
False,
)
elif re.match(r"^AWS::[\s\S]+$", value):
typer.secho(
f" Pseudo parameter {value!r} is not supported and will be ignored.",
fg="yellow",
)
resolved = False
return value, resolved