From c031e20ff72237012339422b6d88a99fc9ddd223 Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Sun, 20 Oct 2024 11:53:35 +0200 Subject: [PATCH] [jay_diff_upd] - no update on highler dict on lower level add --- jay_diff.py | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/jay_diff.py b/jay_diff.py index 7ec64b9..7a5a06f 100644 --- a/jay_diff.py +++ b/jay_diff.py @@ -34,7 +34,8 @@ def jay_diff_upd(temp_data, data, add_if_not_exist=False): if k in temp_data: if isinstance(data[k], dict): res = jay_diff_upd(temp_data[k], data[k], add_if_not_exist) - new_data[k] = res + if len(res.keys()): + new_data[k] = res elif data[k] != temp_data[k]: new_data[k] = data[k] elif add_if_not_exist: @@ -80,7 +81,7 @@ def jay_merge_update(d, u): return d -def jay_merge_plus(d, u): +def jay_merge_add(d, u): for k, v in u.items(): if isinstance(v, dict): if k in d: @@ -92,10 +93,10 @@ def jay_merge_plus(d, u): return d -def jay_merge_minus(d, u): +def jay_merge_delete(d, u): for k, v in u.items(): if isinstance(v, dict): - jay_merge_minus(d[k], u[k]) + jay_merge_delete(d[k], u[k]) else: if k in d: del d[k] @@ -164,7 +165,7 @@ if __name__ == '__main__': assert diffed == {'c':'coke'} diffed = jay_diff_upd({'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke'}}, {'c': {'f': 'coffee'}}) - assert diffed == {'c': {}} + assert diffed == {} diffed = jay_diff_upd({'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'a':'hamburger', 'b':'fries', 'c': {'e': 'pepsi', 'f': 'coffee'}}) assert diffed == {'c': {'e': 'pepsi'}} @@ -224,7 +225,7 @@ if __name__ == '__main__': assert diffed == {'add': {'b': 'fries'}, 'delete': {'d': 'icecream'}, 'update': {'c': 'coke'}} diffed = jay_diff_full({'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke'}}, {'c': {'f': 'coffee'}}, combine_upd_add=False) - assert diffed == {'add': {'c': {'f': 'coffee'}}, 'delete': {'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke'}}, 'update': {'c': {}}} + assert diffed == {'add': {'c': {'f': 'coffee'}}, 'delete': {'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke'}}} diffed = jay_diff_full({'a': 'hamburger', 'c': 'pepsi', 'd': 'icecream'}, {'a': 'hamburger', 'b': 'fries', 'c': 'coke'}, combine_upd_add=False) assert diffed == {'add': {'b': 'fries'}, 'delete': {'d': 'icecream'}, 'update': {'c': 'coke'}} @@ -245,10 +246,10 @@ if __name__ == '__main__': assert diffed == {'delete': {'c': {'e': 'coke', 'f': 'coffee'}}} diffed = jay_diff_full({'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'a': 'hamburger', 'b': 'fries', 'c': {'f': 'coffee'}}, combine_upd_add=False) - assert diffed == {'delete': {'c': {'e': 'coke'}}, 'update': {'c': {}}} + assert diffed == {'delete': {'c': {'e': 'coke'}}} diffed = jay_diff_full({'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'c': {'e': 'coke'}}, combine_upd_add=False) - assert diffed == {'delete': {'a': 'hamburger', 'b': 'fries', 'c': {'f': 'coffee'}}, 'update': {'c': {}}} + assert diffed == {'delete': {'a': 'hamburger', 'b': 'fries', 'c': {'f': 'coffee'}}} diffed = jay_diff_full({'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'a':'hotdog', 'b':'potatoes'}, combine_upd_add=False) assert diffed == {'delete': {'c': {'e': 'coke', 'f': 'coffee'}}, 'update': {'a': 'hotdog', 'b': 'potatoes'}} @@ -278,23 +279,24 @@ if __name__ == '__main__': assert diffed == {'add': {'c': {'h': 'cake'}}, 'update': {'c': {'e': 'pepsi'}}} # Merge - merged = jay_merge_plus({}, {'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}}) + merged = jay_merge_add({}, {'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke', 'f': 'coffee'}}) assert merged == {'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}} - merged = jay_merge_plus({'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'d':'icecream'}) + merged = jay_merge_add({'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'d': 'icecream'}) assert merged == {'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}, 'd':'icecream'} - merged = jay_merge_minus({'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}, 'd':'icecream'}, {'d':'icecream'}) + merged = jay_merge_add({'a': 'hamburger', 'b': 'fries', 'c': {'f': 'coffee'}}, {'d': 'icecream'}) + assert merged == {'a':'hamburger', 'b':'fries', 'c': {'f': 'coffee'}, 'd':'icecream'} + + merged = jay_merge_add({'a': 'hamburger', 'b': 'fries', 'c': {'f': 'coffee'}, 'd': 'icecream'}, {'d': 'icecream'}) + assert merged == {'a':'hamburger', 'b':'fries', 'c': {'f': 'coffee'}, 'd':'icecream'} + + merged = jay_merge_delete({'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke', 'f': 'coffee'}, 'd': 'icecream'}, {'d': 'icecream'}) assert merged == {'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}} - merged = jay_merge_minus({'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'c': {'f': 'coffee'}}) + merged = jay_merge_delete({'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'c': {'f': 'coffee'}}) assert merged == {'a':'hamburger', 'b':'fries', 'c': {'e': 'coke'}} - merged = jay_merge_minus({'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'c': {'e': 'coke'}}) + merged = jay_merge_delete({'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'c': {'e': 'coke'}}) assert merged == {'a':'hamburger', 'b':'fries', 'c': {'f': 'coffee'}} - merged = jay_merge_plus({'a':'hamburger', 'b':'fries', 'c': {'f': 'coffee'}}, {'d':'icecream'}) - assert merged == {'a':'hamburger', 'b':'fries', 'c': {'f': 'coffee'}, 'd':'icecream'} - - merged = jay_merge_plus({'a':'hamburger', 'b':'fries', 'c': {'f': 'coffee'}, 'd':'icecream'}, {'d':'icecream'}) - assert merged == {'a':'hamburger', 'b':'fries', 'c': {'f': 'coffee'}, 'd':'icecream'}