diff options
author | kafkaf- <thekafkaf@gmail.com> | 2014-11-14 16:18:39 +0200 |
---|---|---|
committer | kafkaf- <thekafkaf@gmail.com> | 2014-11-14 16:18:39 +0200 |
commit | 4c5cb493f2a8e41fd05b9b25df419701e215812a (patch) | |
tree | 83fe53df28d1b0d26d82906a00d129507c981d25 | |
parent | 8a371c786fc77139be2a325c05e0a5c95ea83246 (diff) | |
download | python-json-pointer-4c5cb493f2a8e41fd05b9b25df419701e215812a.tar.gz |
Using the same handling for the case in which the doc is a mapping or an object that support __getitem__(but not a sequence), Updated the tests
-rw-r--r-- | jsonpointer.py | 18 | ||||
-rwxr-xr-x | tests.py | 3 |
2 files changed, 9 insertions, 12 deletions
diff --git a/jsonpointer.py b/jsonpointer.py index b3f0362..06d2cb7 100644 --- a/jsonpointer.py +++ b/jsonpointer.py @@ -225,15 +225,7 @@ class JsonPointer(object): assert (type(doc) in (dict, list) or 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): - + if isinstance(doc, Sequence): if part == '-': return EndOfList(doc) @@ -243,10 +235,14 @@ 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 """ return len(self.parts) > len(ptr.parts) and \ @@ -277,7 +277,8 @@ class AltTypesTests(unittest.TestCase): def test_mock_dict_raises_key_error(self): doc = self.mdict - self.assertRaises(KeyError, resolve_pointer, doc, '/foo') + self.assertRaises(JsonPointerException, resolve_pointer, doc, '/foo') + self.assertRaises(JsonPointerException, resolve_pointer, doc, '/root/1/2/3/4') |