diff options
author | Stefan Kögl <stefan@skoegl.net> | 2017-09-10 17:39:53 +0200 |
---|---|---|
committer | Stefan Kögl <stefan@skoegl.net> | 2017-09-10 17:39:53 +0200 |
commit | a80d1022bd83854025270d251555db3e9b4d74ed (patch) | |
tree | 9b8be369215816f4544a532496e87a223fa40322 /jsonpointer.py | |
parent | e9fa6525f3cef553acd86f3083eb07f2dfc80920 (diff) | |
parent | 1bb180f33504bfbd0b54616208e9ace727506b0d (diff) | |
download | python-json-pointer-a80d1022bd83854025270d251555db3e9b4d74ed.tar.gz |
Merge branch 'thekafkaf-broad-exception-handling'
Diffstat (limited to 'jsonpointer.py')
-rw-r--r-- | jsonpointer.py | 30 |
1 files changed, 13 insertions, 17 deletions
diff --git a/jsonpointer.py b/jsonpointer.py index 4f2bfc7..9a6a613 100644 --- a/jsonpointer.py +++ b/jsonpointer.py @@ -228,26 +228,18 @@ class JsonPointer(object): return part else: - raise JsonPointerException("document '%s' does not support indexing, " + raise JsonPointerException("Document '%s' does not support indexing, " "must be mapping/sequence or support __getitem__" % type(doc)) + def walk(self, doc, part): - """Walks one step in doc and returns the referenced part""" + """ Walks one step in doc and returns the referenced part """ part = self.get_part(doc, part) - assert hasattr(doc, '__getitem__'), \ - 'invalid document type %s' % type(doc) - - if isinstance(doc, Mapping): - try: - return doc[part] - - except KeyError: - raise JsonPointerException("member '%s' not found in %s" % (part, doc)) - - elif isinstance(doc, Sequence): + assert hasattr(doc, '__getitem__'), "invalid document type %s" % (type(doc),) + if isinstance(doc, Sequence): if part == '-': return EndOfList(doc) @@ -257,16 +249,20 @@ class JsonPointer(object): except IndexError: raise JsonPointerException("index '%s' is out of bounds" % (part, )) - else: - # Object supports __getitem__, assume custom indexing + # Else the object is a mapping or supports __getitem__(so assume custom indexing) + try: return doc[part] + except KeyError: + raise JsonPointerException("member '%s' not found in %s" % (part, doc)) + + def contains(self, ptr): - """Returns True if self contains the given ptr""" + """ Returns True if self contains the given ptr """ return self.parts[:len(ptr.parts)] == ptr.parts def __contains__(self, item): - """Returns True if self contains the given ptr""" + """ Returns True if self contains the given ptr """ return self.contains(item) @property |