@@ -34,16 +34,18 @@ cdef class _Base:
34
34
def __cinit__ (self ):
35
35
self ._upstr = upstr
36
36
37
- cdef _upper(self , key):
38
- return key
37
+ cdef str _upper(self , s):
38
+ if type (s) is self ._upstr:
39
+ return < str > s
40
+ return s
39
41
40
42
def getall (self , key , default = _marker):
41
43
"""
42
44
Return a list of all values matching the key (may be an empty list)
43
45
"""
44
- return self ._getall(key, default)
46
+ return self ._getall(self ._upper( key) , default)
45
47
46
- cdef _getall(self , key, default):
48
+ cdef _getall(self , str key, default):
47
49
cdef list res
48
50
key = self ._upper(key)
49
51
res = [v for k, v in self ._items if k == key]
@@ -57,13 +59,13 @@ cdef class _Base:
57
59
"""
58
60
Get first value matching the key
59
61
"""
60
- return self ._getone(key, default)
62
+ return self ._getone(self ._upper( key) , default)
61
63
62
- cdef _getone(self , key, default):
64
+ cdef _getone(self , str key, default):
63
65
cdef tuple item
64
66
key = self ._upper(key)
65
67
for item in self ._items:
66
- if item[0 ] == key:
68
+ if < str > item[0 ] == key:
67
69
return item[1 ]
68
70
if default is not _marker:
69
71
return default
@@ -72,19 +74,19 @@ cdef class _Base:
72
74
# Mapping interface #
73
75
74
76
def __getitem__ (self , key ):
75
- return self ._getone(key, _marker)
77
+ return self ._getone(self ._upper( key) , _marker)
76
78
77
79
def get (self , key , default = None ):
78
- return self ._getone(key, default)
80
+ return self ._getone(self ._upper( key) , default)
79
81
80
82
def __contains__ (self , key ):
81
- return self ._contains(key)
83
+ return self ._contains(self ._upper( key) )
82
84
83
- cdef _contains(self , key):
85
+ cdef _contains(self , str key):
84
86
cdef tuple item
85
87
key = self ._upper(key)
86
88
for item in self ._items:
87
- if item[0 ] == key:
89
+ if < str > item[0 ] == key:
88
90
return True
89
91
return False
90
92
@@ -177,9 +179,9 @@ cdef class CIMultiDictProxy(MultiDictProxy):
177
179
mdict = arg
178
180
self ._items = mdict._items
179
181
180
- cdef _upper(self , s):
182
+ cdef str _upper(self , s):
181
183
if type (s) is self ._upstr:
182
- return s
184
+ return < str > s
183
185
return s.upper()
184
186
185
187
def copy (self ):
@@ -199,6 +201,7 @@ cdef class MultiDict(_Base):
199
201
200
202
cdef _extend(self , tuple args, dict kwargs, name, int do_add):
201
203
cdef tuple item
204
+ cdef str key
202
205
203
206
if len (args) > 1 :
204
207
raise TypeError (" {} takes at most 1 positional argument"
@@ -234,10 +237,10 @@ cdef class MultiDict(_Base):
234
237
else :
235
238
self ._replace(key, value)
236
239
237
- cdef _add(self , key, value):
240
+ cdef _add(self , str key, value):
238
241
self ._items.append((key, value))
239
242
240
- cdef _replace(self , key, value):
243
+ cdef _replace(self , str key, value):
241
244
self ._remove(key, 0 )
242
245
self ._items.append((key, value))
243
246
@@ -266,15 +269,12 @@ cdef class MultiDict(_Base):
266
269
# MutableMapping interface #
267
270
268
271
def __setitem__ (self , key , value ):
269
- key = self ._upper(key)
270
- self ._remove(key, False )
271
- self ._add(key, value)
272
+ self ._replace(self ._upper(key), value)
272
273
273
274
def __delitem__ (self , key ):
274
- key = self ._upper(key)
275
- self ._remove(key, True )
275
+ self ._remove(self ._upper(key), True )
276
276
277
- cdef _remove(self , key, int raise_key_error):
277
+ cdef _remove(self , str key, int raise_key_error):
278
278
cdef int found
279
279
found = False
280
280
for i in range (len (self ._items) - 1 , - 1 , - 1 ):
@@ -285,17 +285,19 @@ cdef class MultiDict(_Base):
285
285
raise KeyError (key)
286
286
287
287
def setdefault (self , key , default = None ):
288
- key = self ._upper(key)
288
+ cdef str skey
289
+ skey = self ._upper(key)
289
290
for k, v in self ._items:
290
- if k == key :
291
+ if k == skey :
291
292
return v
292
- self ._add(key , default)
293
+ self ._add(skey , default)
293
294
return default
294
295
295
296
def pop (self , key , default = _marker):
296
297
cdef int found
298
+ cdef str skey
297
299
cdef object value
298
- key = self ._upper(key)
300
+ skey = self ._upper(key)
299
301
value = None
300
302
found = False
301
303
for i in range (len (self ._items) - 1 , - 1 , - 1 ):
@@ -357,9 +359,9 @@ abc.MutableMapping.register(MultiDict)
357
359
cdef class CIMultiDict(MultiDict):
358
360
""" An ordered dictionary that can have multiple values for each key."""
359
361
360
- cdef _upper(self , s):
362
+ cdef str _upper(self , s):
361
363
if type (s) is self ._upstr:
362
- return s
364
+ return < str > s
363
365
return s.upper()
364
366
365
367
0 commit comments