From 620d22d2e4fecbe7532b3e220432330b8f07e62d Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Tue, 26 May 2026 16:16:33 +0200 Subject: [PATCH] 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 --- utils/jay_diff.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/utils/jay_diff.py b/utils/jay_diff.py index 033fe12..a678d8b 100644 --- a/utils/jay_diff.py +++ b/utils/jay_diff.py @@ -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'}}