Fix _stream_unary
not working with empty iterables (#422)
* Fixed `do_many_things` method in `ThingService` * Added test for empty iterables * Fixed `_stream_unary` not sending request first
This commit is contained in:
parent
24db53290e
commit
e309513131
@ -127,6 +127,7 @@ class ServiceStub(ABC):
|
|||||||
response_type,
|
response_type,
|
||||||
**self.__resolve_request_kwargs(timeout, deadline, metadata),
|
**self.__resolve_request_kwargs(timeout, deadline, metadata),
|
||||||
) as stream:
|
) as stream:
|
||||||
|
await stream.send_request()
|
||||||
await self._send_messages(stream, request_iterator)
|
await self._send_messages(stream, request_iterator)
|
||||||
response = await stream.recv_message()
|
response = await stream.recv_message()
|
||||||
assert response is not None
|
assert response is not None
|
||||||
|
@ -272,3 +272,27 @@ async def test_async_gen_for_stream_stream_request():
|
|||||||
assert response_index == len(
|
assert response_index == len(
|
||||||
expected_things
|
expected_things
|
||||||
), "Didn't receive all expected responses"
|
), "Didn't receive all expected responses"
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_stream_unary_with_empty_iterable():
|
||||||
|
things = [] # empty
|
||||||
|
|
||||||
|
async with ChannelFor([ThingService()]) as channel:
|
||||||
|
client = ThingServiceClient(channel)
|
||||||
|
requests = [DoThingRequest(name) for name in things]
|
||||||
|
response = await client.do_many_things(requests)
|
||||||
|
assert len(response.names) == 0
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_stream_stream_with_empty_iterable():
|
||||||
|
things = [] # empty
|
||||||
|
|
||||||
|
async with ChannelFor([ThingService()]) as channel:
|
||||||
|
client = ThingServiceClient(channel)
|
||||||
|
requests = [GetThingRequest(name) for name in things]
|
||||||
|
responses = [
|
||||||
|
response async for response in client.get_different_things(requests)
|
||||||
|
]
|
||||||
|
assert len(responses) == 0
|
||||||
|
@ -27,7 +27,7 @@ class ThingService:
|
|||||||
async def do_many_things(
|
async def do_many_things(
|
||||||
self, stream: "grpclib.server.Stream[DoThingRequest, DoThingResponse]"
|
self, stream: "grpclib.server.Stream[DoThingRequest, DoThingResponse]"
|
||||||
):
|
):
|
||||||
thing_names = [request.name for request in stream]
|
thing_names = [request.name async for request in stream]
|
||||||
if self.test_hook is not None:
|
if self.test_hook is not None:
|
||||||
self.test_hook(stream)
|
self.test_hook(stream)
|
||||||
await stream.send_message(DoThingResponse(thing_names))
|
await stream.send_message(DoThingResponse(thing_names))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user