summaryrefslogtreecommitdiff
path: root/jsonpatch.py
diff options
context:
space:
mode:
Diffstat (limited to 'jsonpatch.py')
-rw-r--r--jsonpatch.py19
1 files changed, 15 insertions, 4 deletions
diff --git a/jsonpatch.py b/jsonpatch.py
index d102e7e..4dc73d7 100644
--- a/jsonpatch.py
+++ b/jsonpatch.py
@@ -31,7 +31,7 @@
#
"""Apply JSON-Patches according to
-http://tools.ietf.org/html/draft-ietf-appsawg-json-patch-03"""
+http://tools.ietf.org/html/draft-ietf-appsawg-json-patch-04"""
# Will be parsed by setup.py to determine package metadata
__author__ = 'Stefan Kögl <stefan@skoegl.net>'
@@ -63,6 +63,9 @@ class JsonPatchConflict(JsonPatchException):
- etc.
"""
+class JsonPatchTestFailed(JsonPatchException, AssertionError):
+ """ A Test operation failed """
+
def apply_patch(doc, patch, in_place=False):
"""Apply list of patches to specified json document.
@@ -412,9 +415,17 @@ class TestOperation(PatchOperation):
"""Test value by specified location."""
def apply(self, obj):
- value = self.operation['value']
- subobj, part = self.locate(obj, self.location)
- assert subobj[part] == value
+ try:
+ subobj, part = self.locate(obj, self.location)
+ except JsonPatchConflict, c:
+ raise JsonPatchTestFailed(str(c))
+
+ val = subobj[part]
+
+ if 'value' in self.operation:
+ value = self.operation['value']
+ if val != value:
+ raise JsonPatchTestFailed('%s is not equal to tested value %s' % (val, value))
class CopyOperation(PatchOperation):