From 7e459af293954675a5ac9852008666bfd95187ea Mon Sep 17 00:00:00 2001 From: Johan Forsberg Date: Sat, 11 Jan 2014 21:40:29 +0100 Subject: allow moving array items into other items in same array --- jsonpatch.py | 2 +- tests.py | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/jsonpatch.py b/jsonpatch.py index c614666..a46c9b0 100644 --- a/jsonpatch.py +++ b/jsonpatch.py @@ -466,7 +466,7 @@ class MoveOperation(PatchOperation): subobj, part = from_ptr.to_last(obj) value = subobj[part] - if self.pointer.contains(from_ptr): + if isinstance(subobj, dict) and self.pointer.contains(from_ptr): raise JsonPatchException('Cannot move values into its own children') obj = RemoveOperation({ diff --git a/tests.py b/tests.py index 3fbffbb..c071ce2 100755 --- a/tests.py +++ b/tests.py @@ -88,6 +88,12 @@ class ApplyPatchTestCase(unittest.TestCase): res = jsonpatch.apply_patch(obj, [{'op': 'move', 'from': '/foo/1', 'path': '/foo/3'}]) self.assertEqual(res, {'foo': ['all', 'cows', 'eat', 'grass']}) + def test_move_array_item_into_other_item(self): + obj = [{"foo": []}, {"bar": []}] + patch = [{"op": "move", "from": "/0", "path": "/0/bar/0"}] + res = jsonpatch.apply_patch(obj, patch) + self.assertEqual(res, [{'bar': [{"foo": []}]}]) + def test_copy_object_key(self): obj = {'foo': {'bar': 'baz', 'waldo': 'fred'}, 'qux': {'corge': 'grault'}} -- cgit v1.2.1