diff options
author | Stefan Kögl <stefan@skoegl.net> | 2021-11-04 14:19:35 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-04 14:19:35 +0100 |
commit | 896102d605605ec0f48e26bafb54fb591be66ede (patch) | |
tree | bb1a5748d64791ee4370bcc78c715c6d095610f4 | |
parent | 7d146bd7caf196bd04b44bdb6d395e91256fa88c (diff) | |
parent | a5e9f91e59e54bf1889a7eb2bfb24539a281e181 (diff) | |
download | python-json-pointer-896102d605605ec0f48e26bafb54fb591be66ede.tar.gz |
Merge pull request #46 from PeterlitsZo/patch-1
Add method and add classmethod tag
-rw-r--r-- | jsonpointer.py | 14 | ||||
-rwxr-xr-x | tests.py | 23 |
2 files changed, 32 insertions, 5 deletions
diff --git a/jsonpointer.py b/jsonpointer.py index 29b4c80..53191ef 100644 --- a/jsonpointer.py +++ b/jsonpointer.py @@ -193,7 +193,7 @@ class JsonPointer(object): for part in self.parts[:-1]: doc = self.walk(doc, part) - return doc, self.get_part(doc, self.parts[-1]) + return doc, JsonPointer.get_part(doc, self.parts[-1]) def resolve(self, doc, default=_nothing): """Resolves the pointer against doc and returns the referenced object""" @@ -228,7 +228,8 @@ class JsonPointer(object): parent[part] = value return doc - def get_part(self, doc, part): + @classmethod + def get_part(cls, doc, part): """Returns the next step in the correct type""" if isinstance(doc, Mapping): @@ -239,7 +240,7 @@ class JsonPointer(object): if part == '-': return part - if not self._RE_ARRAY_INDEX.match(str(part)): + if not JsonPointer._RE_ARRAY_INDEX.match(str(part)): raise JsonPointerException("'%s' is not a valid sequence index" % part) return int(part) @@ -252,12 +253,17 @@ class JsonPointer(object): else: raise JsonPointerException("Document '%s' does not support indexing, " "must be mapping/sequence or support __getitem__" % type(doc)) + + def get_parts(self): + """Returns the list of the parts. For example, JsonPointer('/a/b').get_parts() == ['a', 'b']""" + + return self.parts def walk(self, doc, part): """ Walks one step in doc and returns the referenced part """ - part = self.get_part(doc, part) + part = JsonPointer.get_part(doc, part) assert hasattr(doc, '__getitem__'), "invalid document type %s" % (type(doc),) @@ -70,10 +70,31 @@ class SpecificationTests(unittest.TestCase): ptr = JsonPointer(path) self.assertEqual(path, ptr.path) - parts = ptr.parts + parts = ptr.get_parts() + self.assertEqual(parts, ptr.parts) new_ptr = JsonPointer.from_parts(parts) self.assertEqual(ptr, new_ptr) + def test_parts(self): + paths = [ + ("", []), + ("/foo", ['foo']), + ("/foo/0", ['foo', '0']), + ("/", ['']), + ("/a~1b", ['a/b']), + ("/c%d", ['c%d']), + ("/e^f", ['e^f']), + ("/g|h", ['g|h']), + ("/i\\j", ['i\j']), + ("/k\"l", ['k"l']), + ("/ ", [' ']), + ("/m~0n", ['m~n']), + ('/\xee', ['\xee']), + ] + for path in paths: + ptr = JsonPointer(path[0]) + self.assertEqual(ptr.get_parts(), path[1]) + class ComparisonTests(unittest.TestCase): |