42
42
43
43
44
44
try :
45
- from urllib import unquote
46
45
from itertools import izip
47
46
str = unicode
48
47
except ImportError : # Python 3
49
- from urllib .parse import unquote
50
48
izip = zip
51
49
52
50
try :
@@ -74,9 +72,14 @@ def set_pointer(doc, pointer, value, inplace=True):
74
72
{'foo': {'another prop': {'baz': 'A string'}, 'anArray': [{'prop': 55}]}}
75
73
True
76
74
77
- >>> set_pointer(obj, '/foo/yet%20another%20prop ', 'added prop') == \
75
+ >>> set_pointer(obj, '/foo/yet another prop ', 'added prop') == \
78
76
{'foo': {'another prop': {'baz': 'A string'}, 'yet another prop': 'added prop', 'anArray': [{'prop': 55}]}}
79
77
True
78
+
79
+ >>> obj = {'foo': {}}
80
+ >>> set_pointer(obj, '/foo/a%20b', 'x') == \
81
+ {'foo': {'a%20b': 'x' }}
82
+ True
80
83
"""
81
84
82
85
pointer = JsonPointer (pointer )
@@ -86,25 +89,37 @@ def set_pointer(doc, pointer, value, inplace=True):
86
89
def resolve_pointer (doc , pointer , default = _nothing ):
87
90
""" Resolves pointer against doc and returns the referenced object
88
91
89
- >>> obj = {'foo': {'anArray': [ {'prop': 44}], 'another prop': {'baz': 'A string' }}}
92
+ >>> obj = {'foo': {'anArray': [ {'prop': 44}], 'another prop': {'baz': 'A string' }}, 'a%20b': 1, 'c d': 2 }
90
93
91
94
>>> resolve_pointer(obj, '') == obj
92
95
True
93
96
94
97
>>> resolve_pointer(obj, '/foo') == obj['foo']
95
98
True
96
99
97
- >>> resolve_pointer(obj, '/foo/another%20prop ') == obj['foo']['another prop']
100
+ >>> resolve_pointer(obj, '/foo/another prop ') == obj['foo']['another prop']
98
101
True
99
102
100
- >>> resolve_pointer(obj, '/foo/another%20prop /baz') == obj['foo']['another prop']['baz']
103
+ >>> resolve_pointer(obj, '/foo/another prop /baz') == obj['foo']['another prop']['baz']
101
104
True
102
105
103
106
>>> resolve_pointer(obj, '/foo/anArray/0') == obj['foo']['anArray'][0]
104
107
True
105
108
106
109
>>> resolve_pointer(obj, '/some/path', None) == None
107
110
True
111
+
112
+ >>> resolve_pointer(obj, '/a b', None) == None
113
+ True
114
+
115
+ >>> resolve_pointer(obj, '/a%20b') == 1
116
+ True
117
+
118
+ >>> resolve_pointer(obj, '/c d') == 2
119
+ True
120
+
121
+ >>> resolve_pointer(obj, '/c%20d', None) == None
122
+ True
108
123
"""
109
124
110
125
pointer = JsonPointer (pointer )
@@ -158,7 +173,6 @@ def __init__(self, pointer):
158
173
if parts .pop (0 ) != '' :
159
174
raise JsonPointerException ('location must starts with /' )
160
175
161
- parts = map (unquote , parts )
162
176
parts = [unescape (part ) for part in parts ]
163
177
self .parts = parts
164
178
0 commit comments