diff options
author | Stefan Kögl <stefan@skoegl.net> | 2017-10-26 13:16:34 +0200 |
---|---|---|
committer | Stefan Kögl <stefan@skoegl.net> | 2017-10-26 13:16:34 +0200 |
commit | c118415bed27c8c0dcb11d045ca406177b7481ae (patch) | |
tree | 748c9f3ec53f31d2e65aa7763c455dabd2647e81 /jsonpointer.py | |
parent | 33d1513ad8453d345f0d7c6b9c350c25c9fddcd4 (diff) | |
download | python-json-pointer-issue-22.tar.gz |
Pointers should not be assumed urlencoded, fix #22issue-22
Diffstat (limited to 'jsonpointer.py')
-rw-r--r-- | jsonpointer.py | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/jsonpointer.py b/jsonpointer.py index 8592508..33095f7 100644 --- a/jsonpointer.py +++ b/jsonpointer.py @@ -42,11 +42,9 @@ __license__ = 'Modified BSD License' try: - from urllib import unquote from itertools import izip str = unicode except ImportError: # Python 3 - from urllib.parse import unquote izip = zip try: @@ -74,9 +72,14 @@ def set_pointer(doc, pointer, value, inplace=True): {'foo': {'another prop': {'baz': 'A string'}, 'anArray': [{'prop': 55}]}} True - >>> set_pointer(obj, '/foo/yet%20another%20prop', 'added prop') == \ + >>> set_pointer(obj, '/foo/yet another prop', 'added prop') == \ {'foo': {'another prop': {'baz': 'A string'}, 'yet another prop': 'added prop', 'anArray': [{'prop': 55}]}} True + + >>> obj = {'foo': {}} + >>> set_pointer(obj, '/foo/a%20b', 'x') == \ + {'foo': {'a%20b': 'x' }} + True """ pointer = JsonPointer(pointer) @@ -86,7 +89,7 @@ def set_pointer(doc, pointer, value, inplace=True): def resolve_pointer(doc, pointer, default=_nothing): """ Resolves pointer against doc and returns the referenced object - >>> obj = {'foo': {'anArray': [ {'prop': 44}], 'another prop': {'baz': 'A string' }}} + >>> obj = {'foo': {'anArray': [ {'prop': 44}], 'another prop': {'baz': 'A string' }}, 'a%20b': 1, 'c d': 2} >>> resolve_pointer(obj, '') == obj True @@ -94,10 +97,10 @@ def resolve_pointer(doc, pointer, default=_nothing): >>> resolve_pointer(obj, '/foo') == obj['foo'] True - >>> resolve_pointer(obj, '/foo/another%20prop') == obj['foo']['another prop'] + >>> resolve_pointer(obj, '/foo/another prop') == obj['foo']['another prop'] True - >>> resolve_pointer(obj, '/foo/another%20prop/baz') == obj['foo']['another prop']['baz'] + >>> resolve_pointer(obj, '/foo/another prop/baz') == obj['foo']['another prop']['baz'] True >>> resolve_pointer(obj, '/foo/anArray/0') == obj['foo']['anArray'][0] @@ -105,6 +108,18 @@ def resolve_pointer(doc, pointer, default=_nothing): >>> resolve_pointer(obj, '/some/path', None) == None True + + >>> resolve_pointer(obj, '/a b', None) == None + True + + >>> resolve_pointer(obj, '/a%20b') == 1 + True + + >>> resolve_pointer(obj, '/c d') == 2 + True + + >>> resolve_pointer(obj, '/c%20d', None) == None + True """ pointer = JsonPointer(pointer) @@ -158,7 +173,6 @@ class JsonPointer(object): if parts.pop(0) != '': raise JsonPointerException('location must starts with /') - parts = map(unquote, parts) parts = [unescape(part) for part in parts] self.parts = parts |