Repository navigation
Copy generated patch values independently of input documents - #253
Merged
stefankoegl merged 1 commit intoNov 5, 2026
Merged
Conversation
Contributor
There was a problem hiding this comment.
🟢 Approval recommended
No active review issues are recorded for the change isolating generated patch values from mutable inputs.
No open issues 🎉
What changed in this PR
This PR makes generated JSON patches independent of mutable input values, preventing later edits to the target document or patch values from affecting each other.
Changes:
- Deep-copy the completed operation list after move optimization.
- Document that generated patch values are copied.
- Add mutation-isolation tests and update the cyclic-value test to verify cycle preservation.
| File | Description |
|---|---|
| tests.py | Tests mutation isolation, both optimization settings, and preservation of copied cycles. |
| jsonpatch.py | Copies finalized operations and documents input independence. |
Review effort: Balanced
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Generated
addandreplaceoperations keep references to mutable values in the target document. Mutating that document aftermake_patch()changes the patch, and editing a generated operation can also change the target.Copy the completed operation list so generated patches retain the values they were built from. Copying after move optimization avoids copying values for operations that are ultimately removed. Tests cover object and array additions/replacements, root replacement, both optimization settings, and mutation in either direction. The existing cyclic-value test now checks that the copied value retains its cycle.
Validation on Python 3.13:
python tests.py(288 tests),python property_tests.py(24 tests), and the CI flake8 error check all pass.