1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
from deepmerge.exception import *
import pytest
from deepmerge import (
always_merger,
conservative_merger,
merge_or_raise,
)
def test_fill_missing_value():
base = {"foo": 0, "baz": 2}
nxt = {"bar": 1}
always_merger.merge(base, nxt)
assert base == {"foo": 0, "bar": 1, "baz": 2}
def test_handles_set_values_via_union():
base = {"a": set("123"), "b": 3}
nxt = {"a": set("2345"), "c": 1}
always_merger.merge(base, nxt)
assert base == {"a": set("12345"), "b": 3, "c": 1}
def test_merge_or_raise_raises_exception():
base = {"foo": 0, "baz": 2}
nxt = {"bar": 1, "foo": "a string!"}
with pytest.raises(InvalidMerge) as exc_info:
merge_or_raise.merge(base, nxt)
exc = exc_info.value
assert exc.strategy_list_name == "type conflict"
assert exc.merge_args == (merge_or_raise, ["foo"], 0, "a string!")
assert exc.merge_kwargs == {}
@pytest.mark.parametrize(
"base, nxt, expected", [("dooby", "fooby", "dooby"), (-10, "goo", -10)]
)
def test_use_existing(base, nxt, expected):
assert conservative_merger.merge(base, nxt) == expected
def test_example():
base = {"foo": "value", "baz": ["a"]}
next = {"bar": "value2", "baz": ["b"]}
always_merger.merge(base, next)
assert base == {"foo": "value", "bar": "value2", "baz": ["a", "b"]}
|