52 lines
1.6 KiB
Python
52 lines
1.6 KiB
Python
|
from typing import Dict
|
||
|
from typing import List
|
||
|
from typing import Text
|
||
|
from typing import Optional
|
||
|
|
||
|
import yaml
|
||
|
import tempfile
|
||
|
import launch
|
||
|
from nav2_common.launch import RewrittenYaml
|
||
|
from rbs_launch_utils.launch_common import load_yaml_abs
|
||
|
|
||
|
class MergedYaml:
|
||
|
"""
|
||
|
Apply RewrittenYaml for list of config files and combine it in one file
|
||
|
"""
|
||
|
def __init__(self, context: launch.LaunchContext,
|
||
|
source_file: Text = "",
|
||
|
root_keys: List = [],
|
||
|
param_rewrites: Dict = {},
|
||
|
convert_types = False,
|
||
|
key_rewrites: Dict = {}):
|
||
|
|
||
|
self.__root_keys = root_keys
|
||
|
self.__context = context
|
||
|
self.__param_rewrites = param_rewrites
|
||
|
self.__convet_types = convert_types
|
||
|
#TODO: work with multiple source files
|
||
|
# for different robots
|
||
|
self.__source_file = source_file
|
||
|
self.__key_rewrites = key_rewrites
|
||
|
|
||
|
def get_config_file(self) -> List[Text]:
|
||
|
config_list = []
|
||
|
for key in self.__root_keys:
|
||
|
yaml = RewrittenYaml(
|
||
|
self.__source_file,
|
||
|
self.__param_rewrites,
|
||
|
key,
|
||
|
self.__key_rewrites,
|
||
|
self.__convet_types)
|
||
|
config_list.append(yaml.perform(self.__context))
|
||
|
return config_list
|
||
|
|
||
|
def merge_yamls(self) -> Text:
|
||
|
configs = self.get_config_file()
|
||
|
yamls = []
|
||
|
for file in configs:
|
||
|
yamls.append(load_yaml_abs(file))
|
||
|
merged_yaml = tempfile.NamedTemporaryFile(mode='w', delete=False, suffix=".yaml")
|
||
|
yaml.dump_all(yamls, merged_yaml)
|
||
|
return merged_yaml.name
|