|
|
|
@ -75,10 +75,10 @@ def _unwrap_client_call_details(call_details, default_details): |
|
|
|
|
return method, timeout, metadata, credentials |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class _LocalFailure(grpc.RpcError, grpc.Future, grpc.Call): |
|
|
|
|
class _FailureOutcome(grpc.RpcError, grpc.Future, grpc.Call): |
|
|
|
|
|
|
|
|
|
def __init__(self, exception, traceback): |
|
|
|
|
super(_LocalFailure, self).__init__() |
|
|
|
|
super(_FailureOutcome, self).__init__() |
|
|
|
|
self._exception = exception |
|
|
|
|
self._traceback = traceback |
|
|
|
|
|
|
|
|
@ -134,6 +134,58 @@ class _LocalFailure(grpc.RpcError, grpc.Future, grpc.Call): |
|
|
|
|
raise self._exception |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class _UnaryOutcome(grpc.Call, grpc.Future): |
|
|
|
|
|
|
|
|
|
def __init__(self, response, call): |
|
|
|
|
self._response = response |
|
|
|
|
self._call = call |
|
|
|
|
|
|
|
|
|
def initial_metadata(self): |
|
|
|
|
return self._call.initial_metadata() |
|
|
|
|
|
|
|
|
|
def trailing_metadata(self): |
|
|
|
|
return self._call.trailing_metadata() |
|
|
|
|
|
|
|
|
|
def code(self): |
|
|
|
|
return self._call.code() |
|
|
|
|
|
|
|
|
|
def details(self): |
|
|
|
|
return self._call.details() |
|
|
|
|
|
|
|
|
|
def is_active(self): |
|
|
|
|
return self._call.is_active() |
|
|
|
|
|
|
|
|
|
def time_remaining(self): |
|
|
|
|
return self._call.time_remaining() |
|
|
|
|
|
|
|
|
|
def cancel(self): |
|
|
|
|
return self._call.cancel() |
|
|
|
|
|
|
|
|
|
def add_callback(self, callback): |
|
|
|
|
return self._call.add_callback(callback) |
|
|
|
|
|
|
|
|
|
def cancelled(self): |
|
|
|
|
return False |
|
|
|
|
|
|
|
|
|
def running(self): |
|
|
|
|
return False |
|
|
|
|
|
|
|
|
|
def done(self): |
|
|
|
|
return True |
|
|
|
|
|
|
|
|
|
def result(self, ignored_timeout=None): |
|
|
|
|
return self._response |
|
|
|
|
|
|
|
|
|
def exception(self, ignored_timeout=None): |
|
|
|
|
return None |
|
|
|
|
|
|
|
|
|
def traceback(self, ignored_timeout=None): |
|
|
|
|
return None |
|
|
|
|
|
|
|
|
|
def add_done_callback(self, fn): |
|
|
|
|
fn(self) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class _UnaryUnaryMultiCallable(grpc.UnaryUnaryMultiCallable): |
|
|
|
|
|
|
|
|
|
def __init__(self, thunk, method, interceptor): |
|
|
|
@ -142,23 +194,45 @@ class _UnaryUnaryMultiCallable(grpc.UnaryUnaryMultiCallable): |
|
|
|
|
self._interceptor = interceptor |
|
|
|
|
|
|
|
|
|
def __call__(self, request, timeout=None, metadata=None, credentials=None): |
|
|
|
|
call_future = self.future( |
|
|
|
|
response, ignored_call = self._with_call( |
|
|
|
|
request, |
|
|
|
|
timeout=timeout, |
|
|
|
|
metadata=metadata, |
|
|
|
|
credentials=credentials) |
|
|
|
|
return call_future.result() |
|
|
|
|
return response |
|
|
|
|
|
|
|
|
|
def _with_call(self, request, timeout=None, metadata=None, |
|
|
|
|
credentials=None): |
|
|
|
|
client_call_details = _ClientCallDetails(self._method, timeout, |
|
|
|
|
metadata, credentials) |
|
|
|
|
|
|
|
|
|
def continuation(new_details, request): |
|
|
|
|
new_method, new_timeout, new_metadata, new_credentials = ( |
|
|
|
|
_unwrap_client_call_details(new_details, client_call_details)) |
|
|
|
|
try: |
|
|
|
|
response, call = self._thunk(new_method).with_call( |
|
|
|
|
request, |
|
|
|
|
timeout=new_timeout, |
|
|
|
|
metadata=new_metadata, |
|
|
|
|
credentials=new_credentials) |
|
|
|
|
return _UnaryOutcome(response, call) |
|
|
|
|
except grpc.RpcError: |
|
|
|
|
raise |
|
|
|
|
except Exception as exception: # pylint:disable=broad-except |
|
|
|
|
return _FailureOutcome(exception, sys.exc_info()[2]) |
|
|
|
|
|
|
|
|
|
call = self._interceptor.intercept_unary_unary( |
|
|
|
|
continuation, client_call_details, request) |
|
|
|
|
return call.result(), call |
|
|
|
|
|
|
|
|
|
def with_call(self, request, timeout=None, metadata=None, credentials=None): |
|
|
|
|
call_future = self.future( |
|
|
|
|
return self._with_call( |
|
|
|
|
request, |
|
|
|
|
timeout=timeout, |
|
|
|
|
metadata=metadata, |
|
|
|
|
credentials=credentials) |
|
|
|
|
return call_future.result(), call_future |
|
|
|
|
|
|
|
|
|
def future(self, request, timeout=None, metadata=None, credentials=None): |
|
|
|
|
|
|
|
|
|
client_call_details = _ClientCallDetails(self._method, timeout, |
|
|
|
|
metadata, credentials) |
|
|
|
|
|
|
|
|
@ -175,7 +249,7 @@ class _UnaryUnaryMultiCallable(grpc.UnaryUnaryMultiCallable): |
|
|
|
|
return self._interceptor.intercept_unary_unary( |
|
|
|
|
continuation, client_call_details, request) |
|
|
|
|
except Exception as exception: # pylint:disable=broad-except |
|
|
|
|
return _LocalFailure(exception, sys.exc_info()[2]) |
|
|
|
|
return _FailureOutcome(exception, sys.exc_info()[2]) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class _UnaryStreamMultiCallable(grpc.UnaryStreamMultiCallable): |
|
|
|
@ -202,7 +276,7 @@ class _UnaryStreamMultiCallable(grpc.UnaryStreamMultiCallable): |
|
|
|
|
return self._interceptor.intercept_unary_stream( |
|
|
|
|
continuation, client_call_details, request) |
|
|
|
|
except Exception as exception: # pylint:disable=broad-except |
|
|
|
|
return _LocalFailure(exception, sys.exc_info()[2]) |
|
|
|
|
return _FailureOutcome(exception, sys.exc_info()[2]) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class _StreamUnaryMultiCallable(grpc.StreamUnaryMultiCallable): |
|
|
|
@ -217,24 +291,50 @@ class _StreamUnaryMultiCallable(grpc.StreamUnaryMultiCallable): |
|
|
|
|
timeout=None, |
|
|
|
|
metadata=None, |
|
|
|
|
credentials=None): |
|
|
|
|
call_future = self.future( |
|
|
|
|
response, ignored_call = self._with_call( |
|
|
|
|
request_iterator, |
|
|
|
|
timeout=timeout, |
|
|
|
|
metadata=metadata, |
|
|
|
|
credentials=credentials) |
|
|
|
|
return call_future.result() |
|
|
|
|
return response |
|
|
|
|
|
|
|
|
|
def _with_call(self, |
|
|
|
|
request_iterator, |
|
|
|
|
timeout=None, |
|
|
|
|
metadata=None, |
|
|
|
|
credentials=None): |
|
|
|
|
client_call_details = _ClientCallDetails(self._method, timeout, |
|
|
|
|
metadata, credentials) |
|
|
|
|
|
|
|
|
|
def continuation(new_details, request_iterator): |
|
|
|
|
new_method, new_timeout, new_metadata, new_credentials = ( |
|
|
|
|
_unwrap_client_call_details(new_details, client_call_details)) |
|
|
|
|
try: |
|
|
|
|
response, call = self._thunk(new_method).with_call( |
|
|
|
|
request_iterator, |
|
|
|
|
timeout=new_timeout, |
|
|
|
|
metadata=new_metadata, |
|
|
|
|
credentials=new_credentials) |
|
|
|
|
return _UnaryOutcome(response, call) |
|
|
|
|
except grpc.RpcError: |
|
|
|
|
raise |
|
|
|
|
except Exception as exception: # pylint:disable=broad-except |
|
|
|
|
return _FailureOutcome(exception, sys.exc_info()[2]) |
|
|
|
|
|
|
|
|
|
call = self._interceptor.intercept_stream_unary( |
|
|
|
|
continuation, client_call_details, request_iterator) |
|
|
|
|
return call.result(), call |
|
|
|
|
|
|
|
|
|
def with_call(self, |
|
|
|
|
request_iterator, |
|
|
|
|
timeout=None, |
|
|
|
|
metadata=None, |
|
|
|
|
credentials=None): |
|
|
|
|
call_future = self.future( |
|
|
|
|
return self._with_call( |
|
|
|
|
request_iterator, |
|
|
|
|
timeout=timeout, |
|
|
|
|
metadata=metadata, |
|
|
|
|
credentials=credentials) |
|
|
|
|
return call_future.result(), call_future |
|
|
|
|
|
|
|
|
|
def future(self, |
|
|
|
|
request_iterator, |
|
|
|
@ -257,7 +357,7 @@ class _StreamUnaryMultiCallable(grpc.StreamUnaryMultiCallable): |
|
|
|
|
return self._interceptor.intercept_stream_unary( |
|
|
|
|
continuation, client_call_details, request_iterator) |
|
|
|
|
except Exception as exception: # pylint:disable=broad-except |
|
|
|
|
return _LocalFailure(exception, sys.exc_info()[2]) |
|
|
|
|
return _FailureOutcome(exception, sys.exc_info()[2]) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class _StreamStreamMultiCallable(grpc.StreamStreamMultiCallable): |
|
|
|
@ -288,7 +388,7 @@ class _StreamStreamMultiCallable(grpc.StreamStreamMultiCallable): |
|
|
|
|
return self._interceptor.intercept_stream_stream( |
|
|
|
|
continuation, client_call_details, request_iterator) |
|
|
|
|
except Exception as exception: # pylint:disable=broad-except |
|
|
|
|
return _LocalFailure(exception, sys.exc_info()[2]) |
|
|
|
|
return _FailureOutcome(exception, sys.exc_info()[2]) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class _Channel(grpc.Channel): |
|
|
|
|