diff options
author | Stefan Kögl <stefan@skoegl.net> | 2011-08-02 07:36:24 +0000 |
---|---|---|
committer | Stefan Kögl <stefan@skoegl.net> | 2011-08-02 07:36:24 +0000 |
commit | fb80392c799816a0b9114a0d4acd17df7e9f227d (patch) | |
tree | 1c1f2503fb80cb483e54053f5c56aed878ef4b74 /jsonpointer.py | |
parent | 759aa5ea0317711e5e944a0793f783f3cc293a6a (diff) | |
download | python-json-pointer-fb80392c799816a0b9114a0d4acd17df7e9f227d.tar.gz |
add default parameter to resolve_pointer()
Diffstat (limited to 'jsonpointer.py')
-rw-r--r-- | jsonpointer.py | 22 |
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 |