Fix multipart edge cases with data={} and/or files={} (#861)
* Add reproducible test example for empty multipart * Possible fix for empty combination of files/data * Return bytestream with empty data/files * Remove content-length in test Co-authored-by: florimondmanca <florimond.manca@gmail.com>
This commit is contained in:
parent
43ec09c3cb
commit
430285f55b
@ -323,7 +323,7 @@ def encode(
|
||||
Handles encoding the given `data`, `files`, and `json`, returning
|
||||
a `ContentStream` implementation.
|
||||
"""
|
||||
if data is None:
|
||||
if not data:
|
||||
if json is not None:
|
||||
return JSONStream(json=json)
|
||||
elif files:
|
||||
@ -331,7 +331,7 @@ def encode(
|
||||
else:
|
||||
return ByteStream(body=b"")
|
||||
elif isinstance(data, dict):
|
||||
if files is not None:
|
||||
if files:
|
||||
return MultipartStream(data=data, files=files, boundary=boundary)
|
||||
else:
|
||||
return URLEncodedStream(data=data)
|
||||
|
||||
@ -189,6 +189,18 @@ async def test_multipart_data_and_files_content():
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_empty_request():
|
||||
stream = encode(data={}, files={})
|
||||
sync_content = b"".join([part for part in stream])
|
||||
async_content = b"".join([part async for part in stream])
|
||||
|
||||
assert stream.can_replay()
|
||||
assert stream.get_headers() == {}
|
||||
assert sync_content == b""
|
||||
assert async_content == b""
|
||||
|
||||
|
||||
def test_invalid_argument():
|
||||
with pytest.raises(TypeError):
|
||||
encode(123)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user