jay_merge_full: handle non-jaydiff input (full snapshot passthrough)
When _diff contains none of the jaydiff keys (update, update_add, add, delete) and _old is empty, return _diff directly. This lets callers pass a raw snapshot into jay_merge_full without needing a separate code path for the initial-state bootstrap case. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+12
-1
@@ -108,15 +108,23 @@ def jay_merge_delete(_old, _new):
|
||||
|
||||
|
||||
def jay_merge_full(_old, _diff):
|
||||
_is_diff = False
|
||||
res = _old
|
||||
if "update" in _diff:
|
||||
res = jay_merge_update(res, _diff['update'])
|
||||
_is_diff = True
|
||||
if "update_add" in _diff:
|
||||
res = jay_merge_update(res, _diff['update_add'])
|
||||
_is_diff = True
|
||||
if "add" in _diff:
|
||||
res = jay_merge_add(res, _diff['add'])
|
||||
_is_diff = True
|
||||
if "delete" in _diff:
|
||||
res = jay_merge_delete(res, _diff['delete'])
|
||||
_is_diff = True
|
||||
|
||||
if not _is_diff and not _old:
|
||||
res = _diff
|
||||
|
||||
return res
|
||||
|
||||
@@ -392,8 +400,11 @@ def main() -> None:
|
||||
assert result == {'a':'hamburger', 'b':'fries', 'c': {'f': 'coffee'}}
|
||||
|
||||
# jay_merge_full
|
||||
# combine_upd_add = False
|
||||
# the no-jaydiff case
|
||||
result = jay_merge_full({}, {'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke', 'f': 'coffee'}})
|
||||
assert result == {'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke', 'f': 'coffee'}}
|
||||
|
||||
# combine_upd_add = False
|
||||
result = jay_merge_full({'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke', 'f': 'coffee'}}, {'add': {'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke', 'f': 'coffee'}}})
|
||||
assert result == {'a': 'hamburger', 'b': 'fries', 'c': {'e': 'coke', 'f': 'coffee'}}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user