def test_multidict(): """Multidict behavior""" md = MultiDict() assert isinstance(md, dict) mapping = [('a', 1), ('b', 2), ('a', 2), ('d', 3), ('a', 1), ('a', 3), ('d', 4), ('c', 3)] md = MultiDict(mapping) # simple getitem gives the first value assert md['a'] == 1 assert md['c'] == 3 assert_raises(KeyError, lambda: md['e']) assert md.get('a') == 1 # list getitem assert md.getlist('a') == [1, 2, 1, 3] assert md.getlist('d') == [3, 4] # do not raise if key not found assert md.getlist('x') == [] # simple setitem overwrites all values md['a'] = 42 assert md.getlist('a') == [42] # list setitem md.setlist('a', [1, 2, 3]) assert md['a'] == 1 assert md.getlist('a') == [1, 2, 3] # verify that it does not change original lists l1 = [1, 2, 3] md.setlist('a', l1) del l1[:] assert md['a'] == 1 # setdefault, setlistdefault assert md.setdefault('u', 23) == 23 assert md.getlist('u') == [23] del md['u'] assert md.setlistdefault('u', [-1, -2]) == [-1, -2] assert md.getlist('u') == [-1, -2] assert md['u'] == -1 # delitem del md['u'] assert_raises(KeyError, lambda: md['u']) del md['d'] assert md.getlist('d') == [] # keys, values, items, lists assert list(sorted(md.keys())) == ['a', 'b', 'c'] assert list(sorted(md.iterkeys())) == ['a', 'b', 'c'] assert list(sorted(md.values())) == [1, 2, 3] assert list(sorted(md.itervalues())) == [1, 2, 3] assert list(sorted(md.items())) == [('a', 1), ('b', 2), ('c', 3)] assert list(sorted(md.items(multi=True))) == \ [('a', 1), ('a', 2), ('a', 3), ('b', 2), ('c', 3)] assert list(sorted(md.iteritems())) == [('a', 1), ('b', 2), ('c', 3)] assert list(sorted(md.iteritems(multi=True))) == \ [('a', 1), ('a', 2), ('a', 3), ('b', 2), ('c', 3)] assert list(sorted(md.lists())) == [('a', [1, 2, 3]), ('b', [2]), ('c', [3])] assert list(sorted(md.iterlists())) == [('a', [1, 2, 3]), ('b', [2]), ('c', [3])] # copy method copy = md.copy() assert copy['a'] == 1 assert copy.getlist('a') == [1, 2, 3] # update with a multidict od = MultiDict([('a', 4), ('a', 5), ('y', 0)]) md.update(od) assert md.getlist('a') == [1, 2, 3, 4, 5] assert md.getlist('y') == [0] # update with a regular dict md = copy od = {'a': 4, 'y': 0} md.update(od) assert md.getlist('a') == [1, 2, 3, 4] assert md.getlist('y') == [0] # pop, poplist, popitem, popitemlist assert md.pop('y') == 0 assert 'y' not in md assert md.poplist('a') == [1, 2, 3, 4] assert 'a' not in md assert md.poplist('missing') == [] # remaining: b=2, c=3 popped = md.popitem() assert popped in [('b', 2), ('c', 3)] popped = md.popitemlist() assert popped in [('b', [2]), ('c', [3])] # type conversion md = MultiDict({'a': '4', 'b': ['2', '3']}) assert md.get('a', type=int) == 4 assert md.getlist('b', type=int) == [2, 3] # repr md = MultiDict([('a', 1), ('a', 2), ('b', 3)]) assert "('a', 1)" in repr(md) assert "('a', 2)" in repr(md) assert "('b', 3)" in repr(md)
def test_multidict(): """Multidict behavior""" md = MultiDict() assert isinstance(md, dict) mapping = [('a', 1), ('b', 2), ('a', 2), ('d', 3), ('a', 1), ('a', 3), ('d', 4), ('c', 3)] md = MultiDict(mapping) # simple getitem gives the first value assert md['a'] == 1 assert md['c'] == 3 assert_raises(KeyError, lambda: md['e']) assert md.get('a') == 1 # list getitem assert md.getlist('a') == [1, 2, 1, 3] assert md.getlist('d') == [3, 4] # do not raise if key not found assert md.getlist('x') == [] # simple setitem overwrites all values md['a'] = 42 assert md.getlist('a') == [42] # list setitem md.setlist('a', [1, 2, 3]) assert md['a'] == 1 assert md.getlist('a') == [1, 2, 3] # verify that it does not change original lists l1 = [1, 2, 3] md.setlist('a', l1) del l1[:] assert md['a'] == 1 # setdefault, setlistdefault assert md.setdefault('u', 23) == 23 assert md.getlist('u') == [23] del md['u'] assert md.setlistdefault('u', [-1, -2]) == [-1, -2] assert md.getlist('u') == [-1, -2] assert md['u'] == -1 # delitem del md['u'] assert_raises(KeyError, lambda: md['u']) del md['d'] assert md.getlist('d') == [] # keys, values, items, lists assert list(sorted(md.keys())) == ['a', 'b', 'c'] assert list(sorted(md.iterkeys())) == ['a', 'b', 'c'] assert list(sorted(md.values())) == [1, 2, 3] assert list(sorted(md.itervalues())) == [1, 2, 3] assert list(sorted(md.items())) == [('a', 1), ('b', 2), ('c', 3)] assert list(sorted(md.items(multi=True))) == \ [('a', 1), ('a', 2), ('a', 3), ('b', 2), ('c', 3)] assert list(sorted(md.iteritems())) == [('a', 1), ('b', 2), ('c', 3)] assert list(sorted(md.iteritems(multi=True))) == \ [('a', 1), ('a', 2), ('a', 3), ('b', 2), ('c', 3)] assert list(sorted(md.lists())) == [('a', [1, 2, 3]), ('b', [2]), ('c', [3])] assert list(sorted(md.iterlists())) == [('a', [1, 2, 3]), ('b', [2]), ('c', [3])] # copy method copy = md.copy() assert copy['a'] == 1 assert copy.getlist('a') == [1, 2, 3] # update with a multidict od = MultiDict([('a', 4), ('a', 5), ('y', 0)]) md.update(od) assert md.getlist('a') == [1, 2, 3, 4, 5] assert md.getlist('y') == [0] # update with a regular dict md = copy od = {'a': 4, 'y': 0} md.update(od) assert md.getlist('a') == [1, 2, 3, 4] assert md.getlist('y') == [0] # pop, poplist, popitem, popitemlist assert md.pop('y') == 0 assert 'y' not in md assert md.poplist('a') == [1, 2, 3, 4] assert 'a' not in md assert md.poplist('missing') == [] # remaining: b=2, c=3 popped = md.popitem() assert popped in [('b', 2), ('c', 3)] popped = md.popitemlist() assert popped in [('b', [2]), ('c', [3])] # type conversion md = MultiDict({'a': '4', 'b': ['2', '3']}) assert md.get('a', type=int) == 4 assert md.getlist('b', type=int) == [2, 3] # repr md = MultiDict([('a', 1), ('a', 2), ('b', 3)]) assert "('a', 1)" in repr(md) assert "('a', 2)" in repr(md) assert "('b', 3)" in repr(md) # add and getlist md.add('c', '42') md.add('c', '23') assert md.getlist('c') == ['42', '23'] md.add('c', 'blah') assert md.getlist('c', type=int) == [42, 23] # iter interfaces assert list(zip(md.keys(), md.listvalues())) == list(md.lists()) assert list(zip(md, md.iterlistvalues())) == list(md.iterlists()) assert list(zip(md.iterkeys(), md.iterlistvalues())) == list(md.iterlists()) # setdefault md = MultiDict() md.setdefault('x', []).append(42) md.setdefault('x', []).append(23) assert md['x'] == [42, 23] # to dict md = MultiDict() md['foo'] = 42 md.add('bar', 1) md.add('bar', 2) assert md.to_dict() == {'foo': 42, 'bar': 1} assert md.to_dict(flat=False) == {'foo': [42], 'bar': [1, 2]} # popitem from empty dict assert_raises(KeyError, MultiDict().popitem) assert_raises(KeyError, MultiDict().popitemlist) # key errors are of a special type assert_raises(MultiDict.KeyError, MultiDict().__getitem__, 42) # setlist works md = MultiDict() md['foo'] = 42 md.setlist('foo', [1, 2]) assert md.getlist('foo') == [1, 2]
def test_multidict(): """Multidict behavior""" md = MultiDict() assert isinstance(md, dict) mapping = [("a", 1), ("b", 2), ("a", 2), ("d", 3), ("a", 1), ("a", 3), ("d", 4), ("c", 3)] md = MultiDict(mapping) # simple getitem gives the first value assert md["a"] == 1 assert md["c"] == 3 assert_raises(KeyError, lambda: md["e"]) assert md.get("a") == 1 # list getitem assert md.getlist("a") == [1, 2, 1, 3] assert md.getlist("d") == [3, 4] # do not raise if key not found assert md.getlist("x") == [] # simple setitem overwrites all values md["a"] = 42 assert md.getlist("a") == [42] # list setitem md.setlist("a", [1, 2, 3]) assert md["a"] == 1 assert md.getlist("a") == [1, 2, 3] # verify that it does not change original lists l1 = [1, 2, 3] md.setlist("a", l1) del l1[:] assert md["a"] == 1 # setdefault, setlistdefault assert md.setdefault("u", 23) == 23 assert md.getlist("u") == [23] del md["u"] assert md.setlistdefault("u", [-1, -2]) == [-1, -2] assert md.getlist("u") == [-1, -2] assert md["u"] == -1 # delitem del md["u"] assert_raises(KeyError, lambda: md["u"]) del md["d"] assert md.getlist("d") == [] # keys, values, items, lists assert list(sorted(md.keys())) == ["a", "b", "c"] assert list(sorted(md.iterkeys())) == ["a", "b", "c"] assert list(sorted(md.values())) == [1, 2, 3] assert list(sorted(md.itervalues())) == [1, 2, 3] assert list(sorted(md.items())) == [("a", 1), ("b", 2), ("c", 3)] assert list(sorted(md.items(multi=True))) == [("a", 1), ("a", 2), ("a", 3), ("b", 2), ("c", 3)] assert list(sorted(md.iteritems())) == [("a", 1), ("b", 2), ("c", 3)] assert list(sorted(md.iteritems(multi=True))) == [("a", 1), ("a", 2), ("a", 3), ("b", 2), ("c", 3)] assert list(sorted(md.lists())) == [("a", [1, 2, 3]), ("b", [2]), ("c", [3])] assert list(sorted(md.iterlists())) == [("a", [1, 2, 3]), ("b", [2]), ("c", [3])] # copy method copy = md.copy() assert copy["a"] == 1 assert copy.getlist("a") == [1, 2, 3] # update with a multidict od = MultiDict([("a", 4), ("a", 5), ("y", 0)]) md.update(od) assert md.getlist("a") == [1, 2, 3, 4, 5] assert md.getlist("y") == [0] # update with a regular dict md = copy od = {"a": 4, "y": 0} md.update(od) assert md.getlist("a") == [1, 2, 3, 4] assert md.getlist("y") == [0] # pop, poplist, popitem, popitemlist assert md.pop("y") == 0 assert "y" not in md assert md.poplist("a") == [1, 2, 3, 4] assert "a" not in md assert md.poplist("missing") == [] # remaining: b=2, c=3 popped = md.popitem() assert popped in [("b", 2), ("c", 3)] popped = md.popitemlist() assert popped in [("b", [2]), ("c", [3])] # type conversion md = MultiDict({"a": "4", "b": ["2", "3"]}) assert md.get("a", type=int) == 4 assert md.getlist("b", type=int) == [2, 3] # repr md = MultiDict([("a", 1), ("a", 2), ("b", 3)]) assert "('a', 1)" in repr(md) assert "('a', 2)" in repr(md) assert "('b', 3)" in repr(md) # add and getlist md.add("c", "42") md.add("c", "23") assert md.getlist("c") == ["42", "23"] md.add("c", "blah") assert md.getlist("c", type=int) == [42, 23] # iter interfaces assert list(zip(md.keys(), md.listvalues())) == list(md.lists()) assert list(zip(md, md.iterlistvalues())) == list(md.iterlists()) assert list(zip(md.iterkeys(), md.iterlistvalues())) == list(md.iterlists()) # setdefault md = MultiDict() md.setdefault("x", []).append(42) md.setdefault("x", []).append(23) assert md["x"] == [42, 23] # to dict md = MultiDict() md["foo"] = 42 md.add("bar", 1) md.add("bar", 2) assert md.to_dict() == {"foo": 42, "bar": 1} assert md.to_dict(flat=False) == {"foo": [42], "bar": [1, 2]} # popitem from empty dict assert_raises(KeyError, MultiDict().popitem) assert_raises(KeyError, MultiDict().popitemlist) # key errors are of a special type assert_raises(MultiDict.KeyError, MultiDict().__getitem__, 42) # setlist works md = MultiDict() md["foo"] = 42 md.setlist("foo", [1, 2]) assert md.getlist("foo") == [1, 2]