]> git.ipfire.org Git - thirdparty/httpx.git/commitdiff
Raise `TypeError` on invalid query params. (#2523)
authorTom Christie <tom@tomchristie.com>
Fri, 30 Dec 2022 20:56:48 +0000 (20:56 +0000)
committerGitHub <noreply@github.com>
Fri, 30 Dec 2022 20:56:48 +0000 (20:56 +0000)
* Raise TypeError on invalid query params

* Fix TypeError

* Update tests/models/test_queryparams.py

Co-authored-by: Michael Adkins <contact@zanie.dev>
* Linting

* Fix exception check

Co-authored-by: Michael Adkins <contact@zanie.dev>
httpx/_utils.py
tests/models/test_queryparams.py

index 1f64deedcda337d6437b2c9a8ab205cc3ee0fc51..1e1570ee7f40ec80d334410b0cd43727000f8585 100644 (file)
@@ -67,7 +67,11 @@ def primitive_value_to_str(value: "PrimitiveData") -> str:
         return "false"
     elif value is None:
         return ""
-    return str(value)
+    elif isinstance(value, (str, float, int)):
+        return str(value)
+    raise TypeError(
+        f"Expected str, int, float, bool, or None. Got {type(value).__name__!r}."
+    )
 
 
 def is_known_encoding(encoding: str) -> bool:
index 29b2ca634d73036db3b10e55e965a915e70de6e6..cbb487bbc645d51c62f522045912e0b4a05ff77b 100644 (file)
@@ -87,6 +87,13 @@ def test_empty_query_params():
     assert str(q) == "a="
 
 
+def test_invalid_query_params():
+    with pytest.raises(
+        TypeError, match=r"Expected str, int, float, bool, or None. Got 'bytes'."
+    ):
+        httpx.QueryParams({"a": b"bytes"})
+
+
 def test_queryparam_update_is_hard_deprecated():
     q = httpx.QueryParams("a=123")
     with pytest.raises(RuntimeError):