def test_operation_equality(self): add = jsonpatch.AddOperation({ 'path': '/new-element', 'value': 'new-value' }) add2 = jsonpatch.AddOperation({ 'path': '/new-element', 'value': 'new-value' }) rm = jsonpatch.RemoveOperation({'path': '/target'}) self.assertEqual(add, add2) self.assertNotEqual(add, rm)
def apply(self, obj): try: from_ptr = jsonpatch.JsonPointer(self.location) except KeyError as ex: raise jsonpatch.InvalidJsonPatch( "The operation does not contain a 'from' member") subobj, part = from_ptr.to_last(obj) try: value = subobj[part] except (KeyError, IndexError) as ex: raise jsonpatch.JsonPatchConflict(str(ex)) obj = jsonpatch.RemoveOperation({ 'op': 'remove', 'path': self.location }).apply(obj) obj = jsonpatch.AddOperation({ 'op': 'add', 'path': self.location, 'value': [v.strip() for v in value.split(",") if v.strip()] }).apply(obj) return obj
def apply(self, obj): try: from_ptr = jsonpatch.JsonPointer(self.location) except KeyError as ex: raise jsonpatch.InvalidJsonPatch( "The operation does not contain a 'from' member") subobj, part = from_ptr.to_last(obj) try: value = subobj[part] except (KeyError, IndexError) as ex: raise jsonpatch.JsonPatchConflict(str(ex)) obj = jsonpatch.RemoveOperation({ 'op': 'remove', 'path': self.location }).apply(obj) obj = jsonpatch.AddOperation({ 'op': 'add', 'path': self.location, 'value': dateutil.parser.parse(value).strftime("%Y-%m-%d") }).apply(obj) return obj
def test_add_operation_structure(self): with self.assertRaises(jsonpatch.InvalidJsonPatch): jsonpatch.AddOperation({'path': '/'}).apply({})