Skip to content

Commit 0056df9

Browse files
committed
Fix Cython multidict.extend()
1 parent 7ed02b1 commit 0056df9

File tree

1 file changed

+17
-8
lines changed

1 file changed

+17
-8
lines changed

aiohttp/_multidict.pyx

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -208,22 +208,31 @@ cdef class MultiDict(_Base):
208208
" ({} given)".format(name, len(args)))
209209

210210
if args:
211-
if hasattr(args[0], 'items'):
212-
for item in args[0].items():
213-
key, value = item
214-
key = self._upper(key)
211+
arg = args[0]
212+
if isinstance(arg, _Base):
213+
for item in (<_Base>arg)._items:
214+
key = self._upper(item[0])
215+
value = item[1]
216+
if do_add:
217+
self._add(key, value)
218+
else:
219+
self._replace(key, value)
220+
elif hasattr(arg, 'items'):
221+
for item in arg.items():
222+
key = self._upper(item[0])
223+
value = item[1]
215224
if do_add:
216225
self._add(key, value)
217226
else:
218227
self._replace(key, value)
219228
else:
220-
for arg in args[0]:
221-
if not len(arg) == 2:
229+
for i in arg:
230+
if not len(i) == 2:
222231
raise TypeError(
223232
"{} takes either dict or list of (key, value) "
224233
"tuples".format(name))
225-
key, value = arg
226-
key = self._upper(key)
234+
key = self._upper(i[0])
235+
value = i[1]
227236
if do_add:
228237
self._add(key, value)
229238
else:

0 commit comments

Comments
 (0)