Skip to content

Patchdiff πŸ” Bidirectional patch diffs

Notifications You must be signed in to change notification settings

fork-tongue/patchdiff

Folders and files

NameName
Last commit message
Last commit date
Oct 23, 2023
Jan 19, 2023
Jan 19, 2023
Nov 2, 2021
Mar 3, 2022
Oct 23, 2023
Oct 23, 2023
Nov 2, 2021

Repository files navigation

PyPI version CI status

Patchdiff πŸ”

Based on rfc6902 this library provides a simple API to generate bi-directional diffs between composite python datastructures composed out of lists, sets, tuples and dicts. The diffs are jsonpatch compliant, and can optionally be serialized to json format. Patchdiff can also be used to apply lists of patches to objects, both in-place or on a deepcopy of the input.

Install

pip install patchdiff

Quick-start

from patchdiff import apply, diff, iapply, to_json

input = {"a": [5, 7, 9, {"a", "b", "c"}], "b": 6}
output = {"a": [5, 2, 9, {"b", "c"}], "b": 6, "c": 7}

ops, reverse_ops = diff(input, output)

assert apply(input, ops) == output
assert apply(output, reverse_ops) == input

iapply(input, ops)  # apply in-place
assert input == output

print(to_json(ops, indent=4))
# [
#     {
#         "op": "add",
#         "path": "/c",
#         "value": 7
#     },
#     {
#         "op": "replace",
#         "path": "/a/1",
#         "value": 2
#     },
#     {
#         "op": "remove",
#         "path": "/a/3/a"
#     }
# ]