Beispiel #1
0
def merge_hash(a, b):
    """
    Recursively merges hash b into a so that keys from b take precedence over keys from a
    """

    _validate_mutable_mappings(a, b)

    # if a is empty or equal to b, return b
    if a == {} or a == b:
        return b.copy()

    # if b is empty the below unfolds quickly
    result = a.copy()

    # next, iterate over b keys and values
    for k, v in iteritems(b):
        # if there's already such key in a
        # and that key contains a MutableMapping
        if k in result and isinstance(
                result[k], MutableMapping) and isinstance(v, MutableMapping):
            # merge those dicts recursively
            result[k] = merge_hash(result[k], v)
        elif k in result and C.DEFAULT_LIST_BEHAVIOUR == "merge" and isinstance(
                v, list):
            result[k] = unique(result[k] + v)
        else:
            # otherwise, just copy the value from b to a
            result[k] = v

    return result
Beispiel #2
0
 def test_hashable(self, data, expected):
     assert sorted(ms.unique(tuple(data))) == expected
Beispiel #3
0
 def test_unhashable(self, data, expected):
     assert sorted(ms.unique(list(data))) == expected
Beispiel #4
0
 def test_hashable(self, data, expected):
     assert ms.unique(env, tuple(data)) == expected
Beispiel #5
0
 def test_unhashable(self, data, expected):
     assert ms.unique(env, list(data)) == expected
Beispiel #6
0
 def test_hashable(self, data, expected):
     assert sorted(ms.unique(tuple(data))) == expected
Beispiel #7
0
 def test_unhashable(self, data, expected):
     assert sorted(ms.unique(list(data))) == expected