Index: Source/bindings/scripts/utilities.py |
diff --git a/Source/bindings/scripts/utilities.py b/Source/bindings/scripts/utilities.py |
index 8bd855514bd36c421b98c5523aed82a2f37cee1b..7c89a62c40a9aca51392148b2c07f397b7fadd8f 100644 |
--- a/Source/bindings/scripts/utilities.py |
+++ b/Source/bindings/scripts/utilities.py |
@@ -182,6 +182,26 @@ def load_interfaces_info_overall_pickle(info_dir): |
return pickle.load(interface_info_file) |
+def merge_dict_recursively(target, diff): |
+ """Merges two dicts into one. |
+ |target| will be updated with |diff|. Part of |diff| may be re-used in |
+ |target|. |
+ """ |
+ for key, value in diff.iteritems(): |
+ if key not in target: |
+ target[key] = value |
+ elif type(value) == dict: |
+ merge_dict_recursively(target[key], value) |
+ elif type(value) == list: |
+ target[key].extend(value) |
+ elif type(value) == set: |
+ target[key].update(value) |
+ else: |
+ # Testing IDLs want to overwrite the values. Production code |
+ # doesn't need any overwriting. |
+ target[key] = value |
+ |
+ |
def create_component_info_provider_core(info_dir): |
interfaces_info = load_interfaces_info_overall_pickle(info_dir) |
with open(os.path.join(info_dir, 'core', 'ComponentInfoCore.pickle')) as component_info_file: |