Skip to content

Commit 51e2476

Browse files
committed
Merge branch 'multidict' of https://github.com/mind1master/aiohttp into mind1master-multidict
2 parents a076bea + 0a97817 commit 51e2476

File tree

2 files changed

+16
-15
lines changed

2 files changed

+16
-15
lines changed

aiohttp/multidict.py

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -42,19 +42,20 @@ def getall(self, key, default=_marker):
4242
res = tuple([v for k, v in self._items if k == key])
4343
if res:
4444
return res
45-
if not res and default != _marker:
45+
if not res and default is not _marker:
4646
return default
4747
raise KeyError('Key not found: %r' % key)
4848

4949
def getone(self, key, default=_marker):
5050
"""
51-
Get one value matching the key, raising a KeyError if multiple
52-
values were found.
51+
Get first value matching the key
5352
"""
54-
v = self.getall(key, default=_marker)
55-
if len(v) > 1 and v != default:
56-
raise KeyError('Multiple values match %r: %r' % (key, v))
57-
return v[0]
53+
for k, v in self._items:
54+
if k == key:
55+
return v
56+
if default is not _marker:
57+
return default
58+
raise KeyError('Key not found: %r' % key)
5859

5960
# extra methods #
6061

@@ -269,12 +270,14 @@ def __init__(self, items, *, getall=False):
269270
super().__init__(items_to_use)
270271

271272
def __contains__(self, value):
272-
values = [item[1] for item in self._mapping]
273-
return value in values
273+
for item in self._mapping:
274+
if item[1] == value:
275+
return True
276+
return False
274277

275278
def __iter__(self):
276-
values = (item[1] for item in self._mapping)
277-
yield from values
279+
for item in self._mapping:
280+
yield item[1]
278281

279282

280283
class _KeysView(abc.KeysView):

tests/test_multidict.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,7 @@ def test_instantiate__with_kwargs(self):
5858

5959
def test_getone(self):
6060
d = self.make_dict([('key', 'value1')], key='value2')
61-
with self.assertRaises(KeyError):
62-
self.assertEqual(d.getone('key'), 'value1')
61+
self.assertEqual(d.getone('key'), 'value1')
6362
self.assertEqual(d.get('key'), 'value1')
6463
self.assertEqual(d['key'], 'value1')
6564

@@ -143,8 +142,7 @@ def make_dict(self, *args, **kwargs):
143142

144143
def test_basics(self):
145144
d = self.make_dict([('KEY', 'value1')], KEY='value2')
146-
with self.assertRaises(KeyError):
147-
self.assertEqual(d.getone('key'), 'value1')
145+
self.assertEqual(d.getone('key'), 'value1')
148146
self.assertEqual(d.get('key'), 'value1')
149147
self.assertEqual(d.get('key2', 'val'), 'val')
150148
self.assertEqual(d['key'], 'value1')

0 commit comments

Comments
 (0)