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)
示例#2
0
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]
示例#3
0
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]
示例#4
0
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]