Total Complexity | 12 |
Total Lines | 29 |
Duplicated Lines | 0 % |
Changes | 0 |
1 | from benedict.utils import type_util |
||
2 | |||
3 | |||
4 | def _merge_dict(d, other, overwrite=True, concat=False): |
||
5 | for key, value in other.items(): |
||
6 | _merge_item(d, key, value, overwrite=overwrite, concat=concat) |
||
7 | |||
8 | |||
9 | def _merge_item(d, key, value, overwrite=True, concat=False): |
||
10 | if key in d: |
||
11 | item = d.get(key, None) |
||
12 | if type_util.is_dict(item) and type_util.is_dict(value): |
||
13 | _merge_dict(item, value, overwrite=overwrite, concat=concat) |
||
14 | elif concat and type_util.is_list(item) and type_util.is_list(value): |
||
15 | item += value |
||
16 | elif overwrite: |
||
17 | d[key] = value |
||
18 | else: |
||
19 | d[key] = value |
||
20 | |||
21 | |||
22 | def merge(d, other, *args, **kwargs): |
||
23 | overwrite = kwargs.get("overwrite", True) |
||
24 | concat = kwargs.get("concat", False) |
||
25 | others = [other] + list(args) |
||
26 | for other in others: |
||
27 | _merge_dict(d, other, overwrite=overwrite, concat=concat) |
||
28 | return d |
||
29 |