From fb80392c799816a0b9114a0d4acd17df7e9f227d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20K=C3=B6gl?= Date: Tue, 2 Aug 2011 07:36:24 +0000 Subject: add default parameter to resolve_pointer() --- jsonpointer.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/jsonpointer.py b/jsonpointer.py index 101388e..2749bbd 100644 --- a/jsonpointer.py +++ b/jsonpointer.py @@ -47,7 +47,10 @@ class JsonPointerException(Exception): pass -def resolve_pointer(doc, pointer): +_nothing = object() + + +def resolve_pointer(doc, pointer, default=_nothing): """ Resolves pointer against doc and returns the referenced object @@ -67,10 +70,14 @@ def resolve_pointer(doc, pointer): >>> resolve_pointer(obj, '/foo/anArray/0') == obj['foo']['anArray'][0] True + + >>> resolve_pointer(obj, '/some/path', None) == None + True + """ pointer = JsonPointer(pointer) - return pointer.resolve(doc) + return pointer.resolve(doc, default) class JsonPointer(object): @@ -84,11 +91,18 @@ class JsonPointer(object): self.parts = map(urllib.unquote, parts) - def resolve(self, doc): + def resolve(self, doc, default=_nothing): """Resolves the pointer against doc and returns the referenced object""" for part in self.parts: - doc = self.walk(doc, part) + + try: + doc = self.walk(doc, part) + except JsonPointerException: + if default is _nothing: + raise + else: + return default return doc -- cgit v1.2.1