kopia lustrzana https://github.com/simonw/datasette
Allow tuples as well as lists in MultiParams, refs #799
rodzic
0da7f49b24
commit
d96ac1d52c
|
@ -759,14 +759,14 @@ class MultiParams:
|
|||
if isinstance(data, dict):
|
||||
for key in data:
|
||||
assert isinstance(
|
||||
data[key], list
|
||||
data[key], (list, tuple)
|
||||
), "dictionary data should be a dictionary of key => [list]"
|
||||
self._data = data
|
||||
elif isinstance(data, list):
|
||||
elif isinstance(data, list) or isinstance(data, tuple):
|
||||
new_data = {}
|
||||
for item in data:
|
||||
assert (
|
||||
isinstance(item, list) and len(item) == 2
|
||||
isinstance(item, (list, tuple)) and len(item) == 2
|
||||
), "list data should be a list of [key, value] pairs"
|
||||
key, value = item
|
||||
new_data.setdefault(key, []).append(value)
|
||||
|
|
|
@ -439,10 +439,20 @@ def test_call_with_supported_arguments():
|
|||
utils.call_with_supported_arguments(foo, a=1)
|
||||
|
||||
|
||||
def test_multi_params_list():
|
||||
p1 = utils.MultiParams([["foo", "bar"], ["foo", "baz"]])
|
||||
@pytest.mark.parametrize("data,should_raise", [
|
||||
([["foo", "bar"], ["foo", "baz"]], False),
|
||||
([("foo", "bar"), ("foo", "baz")], False),
|
||||
((["foo", "bar"], ["foo", "baz"]), False),
|
||||
([["foo", "bar"], ["foo", "baz", "bax"]], True),
|
||||
({"foo": ["bar", "baz"]}, False),
|
||||
({"foo": ("bar", "baz")}, False),
|
||||
({"foo": "bar"}, True),
|
||||
])
|
||||
def test_multi_params(data, should_raise):
|
||||
if should_raise:
|
||||
with pytest.raises(AssertionError):
|
||||
utils.MultiParams(data)
|
||||
return
|
||||
p1 = utils.MultiParams(data)
|
||||
assert "bar" == p1["foo"]
|
||||
assert ["bar", "baz"] == p1.getlist("foo")
|
||||
# Should raise an error if list isn't pairs
|
||||
with pytest.raises(AssertionError):
|
||||
utils.MultiParams([["foo", "bar"], ["foo", "baz", "bar"]])
|
||||
assert ["bar", "baz"] == list(p1.getlist("foo"))
|
||||
|
|
Ładowanie…
Reference in New Issue