benedict.core.merge   A
last analyzed

Complexity

Total Complexity 12

Size/Duplication

Total Lines 29
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 12
eloc 23
dl 0
loc 29
rs 10
c 0
b 0
f 0

3 Functions

Rating   Name   Duplication   Size   Complexity  
A _merge_dict() 0 3 2
B _merge_item() 0 11 8
A merge() 0 7 2
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