From: Tom Christie Date: Fri, 2 Sep 2022 13:24:45 +0000 (+0100) Subject: Fix empty query params (#2354) X-Git-Tag: 0.23.1~25 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d5900cd40ec85e47800e21e77bc684b9f65325ed;p=thirdparty%2Fhttpx.git Fix empty query params (#2354) Co-authored-by: Marcelo Trylesinski --- diff --git a/httpx/_urls.py b/httpx/_urls.py index cf4df384..1211bbba 100644 --- a/httpx/_urls.py +++ b/httpx/_urls.py @@ -540,7 +540,7 @@ class QueryParams(typing.Mapping[str, str]): items: typing.Sequence[typing.Tuple[str, PrimitiveData]] if value is None or isinstance(value, (str, bytes)): value = value.decode("ascii") if isinstance(value, bytes) else value - self._dict = parse_qs(value) + self._dict = parse_qs(value, keep_blank_values=True) elif isinstance(value, QueryParams): self._dict = {k: list(v) for k, v in value._dict.items()} else: diff --git a/tests/models/test_queryparams.py b/tests/models/test_queryparams.py index ba200f14..29b2ca63 100644 --- a/tests/models/test_queryparams.py +++ b/tests/models/test_queryparams.py @@ -76,6 +76,17 @@ def test_queryparam_types(): assert str(q) == "a=1&a=2" +def test_empty_query_params(): + q = httpx.QueryParams({"a": ""}) + assert str(q) == "a=" + + q = httpx.QueryParams("a=") + assert str(q) == "a=" + + q = httpx.QueryParams("a") + assert str(q) == "a=" + + def test_queryparam_update_is_hard_deprecated(): q = httpx.QueryParams("a=123") with pytest.raises(RuntimeError):