diff --git a/jay_diff.py b/jay_diff.py index 7861d3e..318698f 100644 --- a/jay_diff.py +++ b/jay_diff.py @@ -97,9 +97,12 @@ def jay_merge_delete(_old, _new): for k, v in _new.items(): if isinstance(v, dict): jay_merge_delete(_old[k], _new[k]) + if len(_old[k].keys()) == 0: + del _old[k] else: if k in _old: del _old[k] + return _old @@ -426,7 +429,7 @@ if __name__ == '__main__': assert result == {'a': 'hamburger', 'b': 'fries', 'c': 'coke'} result = jay_merge_full({'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'delete': {'c': {'e': 'coke', 'f': 'coffee'}}}) -# assert result == {'a': 'hamburger', 'b': 'fries'} + assert result == {'a': 'hamburger', 'b': 'fries'} result = jay_merge_full({'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'delete': {'c': {'e': 'coke'}}}) assert result == {'a': 'hamburger', 'b': 'fries', 'c': {'f': 'coffee'}} @@ -435,25 +438,25 @@ if __name__ == '__main__': assert result == {'c': {'e': 'coke'}} result = jay_merge_full({'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'delete': {'c': {'e': 'coke', 'f': 'coffee'}}, 'update': {'a': 'hotdog', 'b': 'potatoes'}}) -# assert result == {'a':'hotdog', 'b':'potatoes'} + assert result == {'a':'hotdog', 'b':'potatoes'} result = jay_merge_full({'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'delete': {'a': 'hamburger', 'b': 'fries', 'c': {'f': 'coffee'}}, 'update': {'c': {'e': 'pepsi'}}}) assert result == {'c': {'e': 'pepsi'}} result = jay_merge_full({'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'delete': {'c': {'e': 'coke', 'f': 'coffee'}}, 'update': {'a': 'hotdog'}}) -# assert result == {'a':'hotdog', 'b':'fries'} + assert result == {'a':'hotdog', 'b':'fries'} result = jay_merge_full({'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'update': {'c': {'e': 'pepsi'}}}) assert result == {'a':'hamburger', 'b':'fries', 'c': {'e': 'pepsi', 'f': 'coffee'}} result = jay_merge_full({'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'add': {'d': 'icecream'}, 'delete': {'c': {'e': 'coke', 'f': 'coffee'}}, 'update': {'a': 'hotdog', 'b': 'potatoes'}}) -# assert result == {'a':'hotdog', 'b':'potatoes', 'd': 'icecream'} + assert result == {'a':'hotdog', 'b':'potatoes', 'd': 'icecream'} result = jay_merge_full({'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'add': {'c': {'g': 'tea', 'h': 'cake'}}, 'delete': {'a': 'hamburger', 'c': {'f': 'coffee'}}, 'update': {'b': 'potatoes', 'c': {'e': 'pepsi'}}}) assert result == {'c': {'e': 'pepsi', 'g': 'tea', 'h': 'cake'}, 'b':'potatoes'} result = jay_merge_full({'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'delete': {'c': {'e': 'coke', 'f': 'coffee'}}, 'update': {'a': 'hotdog'}}) -# assert result == {'a':'hotdog', 'b':'fries'} + assert result == {'a':'hotdog', 'b':'fries'} result = jay_merge_full({'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'update': {'c': {'e': 'pepsi'}}}) assert result == {'a':'hamburger', 'b':'fries', 'c': {'e': 'pepsi', 'f': 'coffee'}} @@ -498,7 +501,7 @@ if __name__ == '__main__': assert result == {'a': 'hamburger', 'b': 'fries', 'c': 'coke'} result = jay_merge_full({'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'delete': {'c': {'e': 'coke', 'f': 'coffee'}}}) -# assert result == {'a': 'hamburger', 'b': 'fries'} + assert result == {'a': 'hamburger', 'b': 'fries'} result = jay_merge_full({'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'delete': {'c': {'e': 'coke'}}}) assert result == {'a': 'hamburger', 'b': 'fries', 'c': {'f': 'coffee'}} @@ -507,25 +510,25 @@ if __name__ == '__main__': assert result == {'c': {'e': 'coke'}} result = jay_merge_full({'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'delete': {'c': {'e': 'coke', 'f': 'coffee'}}, 'update_add': {'a': 'hotdog', 'b': 'potatoes'}}) -# assert result == {'a':'hotdog', 'b':'potatoes'} + assert result == {'a':'hotdog', 'b':'potatoes'} result = jay_merge_full({'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'delete': {'a': 'hamburger', 'b': 'fries', 'c': {'f': 'coffee'}}, 'update_add': {'c': {'e': 'pepsi'}}}) assert result == {'c': {'e': 'pepsi'}} result = jay_merge_full({'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'delete': {'c': {'e': 'coke', 'f': 'coffee'}}, 'update_add': {'a': 'hotdog'}}) -# assert result == {'a':'hotdog', 'b':'fries'} + assert result == {'a':'hotdog', 'b':'fries'} result = jay_merge_full({'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'update_add': {'c': {'e': 'pepsi'}}}) assert result == {'a':'hamburger', 'b':'fries', 'c': {'e': 'pepsi', 'f': 'coffee'}} result = jay_merge_full({'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'delete': {'c': {'e': 'coke', 'f': 'coffee'}}, 'update_add': {'a': 'hotdog', 'b': 'potatoes', 'd': 'icecream'}}) -# assert result == {'a':'hotdog', 'b':'potatoes', 'd': 'icecream'} + assert result == {'a':'hotdog', 'b':'potatoes', 'd': 'icecream'} result = jay_merge_full({'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'delete': {'a': 'hamburger', 'c': {'f': 'coffee'}}, 'update_add': {'b': 'potatoes', 'c': {'e': 'pepsi', 'g': 'tea', 'h': 'cake'}}}) -# assert result == {'c': {'e': 'pepsi', 'g': 'tea', 'h': 'cake', 'b':'potatoes'}} + assert result == {'b':'potatoes', 'c': {'e': 'pepsi', 'g': 'tea', 'h': 'cake'}} result = jay_merge_full({'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'delete': {'c': {'e': 'coke', 'f': 'coffee'}}, 'update_add': {'a': 'hotdog'}}) -# assert result == {'a':'hotdog', 'b':'fries'} + assert result == {'a':'hotdog', 'b':'fries'} result = jay_merge_full({'a':'hamburger', 'b':'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'update_add': {'c': {'e': 'pepsi'}}}) assert result == {'a':'hamburger', 'b':'fries', 'c': {'e': 'pepsi', 'f': 'coffee'}}