Add SyncResponse.stream

This commit is contained in:
Tom Christie 2019-04-23 11:31:51 +01:00
parent 4a36ec74c7
commit c9b9ea07b6
2 changed files with 29 additions and 0 deletions

View File

@ -30,6 +30,14 @@ class SyncResponse:
def read(self) -> bytes:
return asyncio_run(self._response.read())
def stream(self) -> typing.Iterator[bytes]:
inner = self._response.stream()
while True:
try:
yield asyncio_run(inner.__anext__())
except StopAsyncIteration as exc:
break
class SyncClient:
def __init__(self, client: Client):

View File

@ -36,3 +36,24 @@ def test_post(server):
with httpcore.SyncConnectionPool() as http:
response = http.request("POST", "http://127.0.0.1:8000/", body=b"Hello, world!")
assert response.status_code == 200
@threadpool
def test_stream_response(server):
with httpcore.SyncConnectionPool() as http:
response = http.request("GET", "http://127.0.0.1:8000/", stream=True)
assert response.status_code == 200
assert not hasattr(response, "body")
body = response.read()
assert body == b"Hello, world!"
@threadpool
def test_stream_iterator(server):
with httpcore.SyncConnectionPool() as http:
response = http.request("GET", "http://127.0.0.1:8000/", stream=True)
assert response.status_code == 200
body = b''
for chunk in response.stream():
body += chunk
assert body == b"Hello, world!"