diff options
author | Johan Forsberg <johan.forsberg@gmail.com> | 2014-01-11 21:40:29 +0100 |
---|---|---|
committer | Johan Forsberg <johan.forsberg@gmail.com> | 2014-01-11 21:40:29 +0100 |
commit | 7e459af293954675a5ac9852008666bfd95187ea (patch) | |
tree | 19f9d21932864b54df0f8cf404150de3c339efb1 | |
parent | 48f9adb8991deb62ba4f327d5e96766c4d0d55e7 (diff) | |
download | python-json-patch-7e459af293954675a5ac9852008666bfd95187ea.tar.gz |
allow moving array items into other items in same array
-rw-r--r-- | jsonpatch.py | 2 | ||||
-rwxr-xr-x | tests.py | 6 |
2 files changed, 7 insertions, 1 deletions
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({ @@ -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'}} |