summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Kögl <stefan@skoegl.net>2021-03-13 20:12:15 +0100
committerStefan Kögl <stefan@skoegl.net>2021-03-13 20:12:15 +0100
commitfd9fa23c1e4b6f9f77218975bc6f10d438ef5c1b (patch)
treedfad9b9df59bbffa82ffafaf64d8fa83efcc85c5
parentd1cfec3187bc5e8b9e43127848107d7f4bf3dd80 (diff)
parentce15b237efb885b0861ba4cfaf2957e591f8cb57 (diff)
downloadpython-json-patch-fd9fa23c1e4b6f9f77218975bc6f10d438ef5c1b.tar.gz
Merge branch 'master' of github.com:stefankoegl/python-json-patch
-rw-r--r--jsonpatch.py14
-rwxr-xr-xtests.py9
2 files changed, 17 insertions, 6 deletions
diff --git a/jsonpatch.py b/jsonpatch.py
index 05d9a2b..3ffe5fb 100644
--- a/jsonpatch.py
+++ b/jsonpatch.py
@@ -699,27 +699,29 @@ class DiffBuilder(object):
root[:] = [root, root, None]
def store_index(self, value, index, st):
+ typed_key = (value, type(value))
try:
storage = self.index_storage[st]
- stored = storage.get(value)
+ stored = storage.get(typed_key)
if stored is None:
- storage[value] = [index]
+ storage[typed_key] = [index]
else:
- storage[value].append(index)
+ storage[typed_key].append(index)
except TypeError:
- self.index_storage2[st].append((value, index))
+ self.index_storage2[st].append((typed_key, index))
def take_index(self, value, st):
+ typed_key = (value, type(value))
try:
- stored = self.index_storage[st].get(value)
+ stored = self.index_storage[st].get(typed_key)
if stored:
return stored.pop()
except TypeError:
storage = self.index_storage2[st]
for i in range(len(storage)-1, -1, -1):
- if storage[i][0] == value:
+ if storage[i][0] == typed_key:
return storage.pop(i)[1]
def insert(self, op):
diff --git a/tests.py b/tests.py
index a56ffc0..8a638cf 100755
--- a/tests.py
+++ b/tests.py
@@ -481,6 +481,15 @@ class MakePatchTestCase(unittest.TestCase):
self.assertEqual(res, dst)
self.assertIsInstance(res['A'], bool)
+ def test_issue129(self):
+ """In JSON 1 is different from True even though in python 1 == True Take Two"""
+ src = {'A': {'D': 1.0}, 'B': {'E': 'a'}}
+ dst = {'A': {'C': 'a'}, 'B': {'C': True}}
+ patch = jsonpatch.make_patch(src, dst)
+ res = jsonpatch.apply_patch(src, patch)
+ self.assertEqual(res, dst)
+ self.assertIsInstance(res['B']['C'], bool)
+
def test_issue103(self):
"""In JSON 1 is different from 1.0 even though in python 1 == 1.0"""
src = {'A': 1}