Raise TypeError if content is passed a 'dict' instance. (#2495)

This commit is contained in:
Tom Christie 2022-12-11 19:12:08 +00:00 committed by GitHub
parent 563a1031f5
commit a8dd079be7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 1 deletions

View File

@ -114,7 +114,11 @@ def encode_content(
headers = {"Content-Length": str(content_length)} if body else {}
return headers, ByteStream(body)
elif isinstance(content, Iterable):
elif isinstance(content, Iterable) and not isinstance(content, dict):
# `not isinstance(content, dict)` is a bit oddly specific, but it
# catches a case that's easy for users to make in error, and would
# otherwise pass through here, like any other bytes-iterable,
# because `dict` happens to be iterable. See issue #2491.
content_length_or_none = peek_filelike_length(content)
if content_length_or_none is None:

View File

@ -360,6 +360,9 @@ def test_invalid_argument():
with pytest.raises(TypeError):
httpx.Request(method, url, content=123) # type: ignore
with pytest.raises(TypeError):
httpx.Request(method, url, content={"a": "b"}) # type: ignore
@pytest.mark.asyncio
async def test_multipart_multiple_files_single_input_content():