summaryrefslogtreecommitdiff
path: root/jsonpointer.py
diff options
context:
space:
mode:
authorStefan Kögl <stefan@skoegl.net>2011-08-02 07:36:24 +0000
committerStefan Kögl <stefan@skoegl.net>2011-08-02 07:36:24 +0000
commitfb80392c799816a0b9114a0d4acd17df7e9f227d (patch)
tree1c1f2503fb80cb483e54053f5c56aed878ef4b74 /jsonpointer.py
parent759aa5ea0317711e5e944a0793f783f3cc293a6a (diff)
downloadpython-json-pointer-fb80392c799816a0b9114a0d4acd17df7e9f227d.tar.gz
add default parameter to resolve_pointer()
Diffstat (limited to 'jsonpointer.py')
-rw-r--r--jsonpointer.py22
1 files 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