def merge(self, key, value): """合并配置项""" if not isinstance(value, dict): return False news = MergeDict(self.get(key, {})) news.merge(value) self.set(key, news) return news
def test_custom_merge(self): class SumDict(MergeDict): @MergeDict.dispatch(int) def merge_int(this, other): return this + other d1 = SumDict({'a': 1, 'b': 'one', 'c': [1]}) d1.merge({'a': 2, 'c': [2]}) assert d1 == {'a': 3, 'b': 'one', 'c': [2]} # make sure subclass doesnt mess up with MergeDict d2 = MergeDict({'a': 1, 'b': 'one', 'c': [1]}) d2.merge({'a': 2, 'c': [2]}) assert d2 == {'a': 2, 'b': 'one', 'c': [2]}
def test_custom_merge(self): class SumDict(MergeDict): @MergeDict.dispatch(int) def merge_int(this, other): return this + other d1 = SumDict({"a": 1, "b": "one", "c": [1]}) d1.merge({"a": 2, "c": [2]}) assert d1 == {"a": 3, "b": "one", "c": [2]} # make sure subclass doesnt mess up with MergeDict d2 = MergeDict({"a": 1, "b": "one", "c": [1]}) d2.merge({"a": 2, "c": [2]}) assert d2 == {"a": 2, "b": "one", "c": [2]}
def test_default_merge_is_like_update(self): d1 = MergeDict({'a': 1, 'b': 'one', 'c': [1]}) d1.merge({'a': 2, 'c': [2]}) assert d1 == {'a': 2, 'b': 'one', 'c': [2]}
def test_merge_keyword(self): config = MergeDict({'foo': 'bar'}) config.merge(foo='baz') assert config['foo'] == 'baz'
def test_default_merge_is_like_update(self): d1 = MergeDict({"a": 1, "b": "one", "c": [1]}) d1.merge({"a": 2, "c": [2]}) assert d1 == {"a": 2, "b": "one", "c": [2]}
def test_merge_keyword(self): config = MergeDict({"foo": "bar"}) config.merge(foo="baz") assert config["foo"] == "baz"