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
def test_hashable(self, data, expected): assert sorted(ms.unique(tuple(data))) == expected
def test_unhashable(self, data, expected): assert sorted(ms.unique(list(data))) == expected
def test_hashable(self, data, expected): assert ms.unique(env, tuple(data)) == expected
def test_unhashable(self, data, expected): assert ms.unique(env, list(data)) == expected