From: Casey Date: Sat, 30 Nov 2019 15:35:10 +0000 (-0800) Subject: Preserve list type query paramaters when merging QueryParams objects (#546) (#547) X-Git-Tag: 0.9.0~36 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9df76ccfe97d4df57a5dad832ef137d68282b432;p=thirdparty%2Fhttpx.git Preserve list type query paramaters when merging QueryParams objects (#546) (#547) --- diff --git a/httpx/models.py b/httpx/models.py index 0b14734d..e703e2da 100644 --- a/httpx/models.py +++ b/httpx/models.py @@ -345,7 +345,12 @@ class QueryParams(typing.Mapping[str, str]): params = QueryParams(params) for param in params: - self[param] = params[param] + item, *extras = params.getlist(param) + self[param] = item + if extras: + self._list.extend((param, e) for e in extras) + # ensure getter matches merged QueryParams getter + self._dict[param] = params[param] def __getitem__(self, key: typing.Any) -> str: return self._dict[key] diff --git a/tests/models/test_queryparams.py b/tests/models/test_queryparams.py index 1303170d..0b0101cb 100644 --- a/tests/models/test_queryparams.py +++ b/tests/models/test_queryparams.py @@ -62,6 +62,9 @@ def test_queryparam_types(): q = QueryParams({"a": 123}) assert str(q) == "a=123" + q = QueryParams({"a": [1, 2]}) + assert str(q) == "a=1&a=2" + def test_queryparam_setters(): q = QueryParams({"a": 1}) @@ -72,3 +75,10 @@ def test_queryparam_setters(): q = QueryParams([("a", 1), ("a", 2)]) q["a"] = "3" assert str(q) == "a=3" + + q = QueryParams([("a", 1), ("b", 1)]) + u = QueryParams([("b", 2), ("b", 3)]) + q.update(u) + + assert str(q) == "a=1&b=2&b=3" + assert q["b"] == u["b"]