This package provides an abstraction of the YAML tree.
When having an YAML file like:
tag:
value1: '2'
value2: 2
value3: 2.0
If the entity e
is wrapping tag
, the following statement will be true:
e.get_attr('value1') == '2'
e.get_attr('value2', data_type=int) == 2
e.get_attr('value3', data_type=float) == 2.0
By default, get_attr
returns an string and it does type checking. The following code will raise a TypeError
:
e.get_attr('value1', data_type=int)
e.get_attr('value2', data_type=float)
e.get_attr('value3')
Allowed types are:
- scalar types: str, int, float, bool
- lists: Can be uniform like List[int]
, or non-uniform like List[Union[str, int]]
, List
(same as list
).
In any case, the members should be of one of the scalar types.
- An union of both any of the above. e.g.: Union[List[int], int]
.
- The list of entities type: List[Entity]
(see below).
List
is the usual object from the typing
package.
data_type
can also be set to None
, which works in the same way as passing:
Union[int, float, bool, list, str]
For checking if an attribute exists, use optional argument:
value = e.get_attr('value', optional=True)
if value is not None:
do_something(value)
With optional=False
(default), AttributeError
is raised if it is not found.
In this yaml:
executable:
cmd: ls
env:
- name: a
- value: '100'
- name: b
- value: 'stuff'
The env
children could be accessed doing:
env = e.get_attr('env', data_type=List[Entity])
len(env) == 2
env[0].get_attr('name') == 'a'
env[0].get_attr('value') == '100'
env[1].get_attr('name') == 'b'
env[1].get_attr('value') == 'stuff'
In these cases, e.env
is a list of entities, that can be accessed in the same abstract way.
All the children can be directly accessed. e.g.:
group:
- executable:
cmd: ls
- executable:
cmd: ps
e.children
or:
group:
scoped: False
children:
- executable:
cmd: ls
- executable:
cmd: ps
e.children
It returns a list of launch_xml.Entity wrapping each of the xml children.
In the example, the list has two Entity
objects wrapping each of the executable
tags.
See this document.