|
|
|
@ -308,16 +308,17 @@ class UnaryUnaryCall(Call, _base_call.UnaryUnaryCall): |
|
|
|
|
_LOCAL_CANCELLATION_DETAILS, None, None)) |
|
|
|
|
|
|
|
|
|
def __await__(self) -> ResponseType: |
|
|
|
|
"""Wait till the ongoing RPC request finishes. |
|
|
|
|
|
|
|
|
|
Returns: |
|
|
|
|
Response of the RPC call. |
|
|
|
|
|
|
|
|
|
Raises: |
|
|
|
|
RpcError: Indicating that the RPC terminated with non-OK status. |
|
|
|
|
asyncio.CancelledError: Indicating that the RPC was canceled. |
|
|
|
|
""" |
|
|
|
|
response = yield from self._call |
|
|
|
|
"""Wait till the ongoing RPC request finishes.""" |
|
|
|
|
try: |
|
|
|
|
response = yield from self._call |
|
|
|
|
except asyncio.CancelledError: |
|
|
|
|
# Even if we converted all other CancelledError, there is still |
|
|
|
|
# this corner case. If the application cancels immediately after |
|
|
|
|
# the Call object is created, we will observe this |
|
|
|
|
# `CancelledError`. |
|
|
|
|
if not self.cancelled(): |
|
|
|
|
self.cancel() |
|
|
|
|
raise _create_rpc_error(_EMPTY_METADATA, self._status.result()) |
|
|
|
|
return response |
|
|
|
|
|
|
|
|
|
|
|
|
|
|