in rostran/providers/ros/yaml_util.py [0:0]
def make_constructor(fun_name):
if fun_name == 'Ref':
tag_name = fun_name
else:
tag_name = 'Fn::{}'.format(fun_name)
if fun_name == 'GetAtt':
def get_attribute_constructor(loader, node):
if isinstance(node, ScalarNode):
value = loader.construct_scalar(node)
try:
split_value = value.split('.')
if len(split_value) == 2:
resource, attribute = split_value
elif len(split_value) >= 3:
if split_value[-2] == 'Outputs':
resource = '.'.join(split_value[:-2])
attribute = '.'.join(split_value[-2:])
else:
resource = '.'.join(split_value[:-1])
attribute = split_value[-1]
else:
raise ValueError
return {tag_name: [resource, attribute]}
except ValueError:
raise ValueError('Resolve !GetAtt error. Value: {}'.format(value))
elif isinstance(node, SequenceNode):
values = loader.construct_sequence(node)
return {tag_name: values}
else:
value = loader.construct_object(node)
return {tag_name: value}
return get_attribute_constructor
def construct(loader, node):
if isinstance(node, ScalarNode):
value = loader.construct_scalar(node)
elif isinstance(node, SequenceNode):
value = loader.construct_sequence(node)
elif isinstance(node, MappingNode):
value = loader.construct_mapping(node)
else:
value = loader.construct_object(node)
return {tag_name: value}
return construct