Skip to content

Commit 7e270e0

Browse files
committed
Deep merge yaml contents
1 parent ed26eb0 commit 7e270e0

File tree

1 file changed

+11
-8
lines changed

1 file changed

+11
-8
lines changed

src/sam_bot_nav2_gz/test/test_follow_waypoints.launch.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,15 @@
1919
"ARTEFACTS_SCENARIO_PARAMS_FILE", "scenario_params.yaml"
2020
)
2121

22+
def deep_merge_dicts(source, override):
23+
"""Recursively merge two dictionaries, with values from `override` taking precedence over `source`"""
24+
for key, value in override.items():
25+
if isinstance(value, dict) and key in source:
26+
source[key] = deep_merge_dicts(source[key], value)
27+
else:
28+
source[key] = value
29+
return source
30+
2231
def merge_ros_params_files(source, override, destination):
2332
"""Merge two ROS2 yaml parameter files into one, overriding the values in the first one with the values in `override`"""
2433
import yaml
@@ -29,15 +38,9 @@ def merge_ros_params_files(source, override, destination):
2938
with open(override, "r") as f:
3039
override_params = yaml.safe_load(f)
3140

32-
# Merge the parameters
33-
for key, value in override_params.items():
34-
if key in source_params:
35-
source_params[key].update(value)
36-
else:
37-
source_params[key] = value
38-
# Write the merged parameters to the destination file
41+
merged_params = deep_merge_dicts(source_params, override_params)
3942
with open(destination, "w") as f:
40-
yaml.dump(source_params, f)
43+
yaml.dump(merged_params, f)
4144

4245
# This function specifies the processes to be run for our test
4346
@pytest.mark.launch_test

0 commit comments

Comments
 (0)