14 """Translates gRPC's client-side API into gRPC's client-side Beta API."""
17 from grpc
import _common
26 _STATUS_CODE_TO_ABORTION_KIND_AND_ABORTION_ERROR_CLASS = {
27 grpc.StatusCode.CANCELLED:
28 (face.Abortion.Kind.CANCELLED, face.CancellationError),
29 grpc.StatusCode.UNKNOWN:
30 (face.Abortion.Kind.REMOTE_FAILURE, face.RemoteError),
31 grpc.StatusCode.DEADLINE_EXCEEDED:
32 (face.Abortion.Kind.EXPIRED, face.ExpirationError),
33 grpc.StatusCode.UNIMPLEMENTED:
34 (face.Abortion.Kind.LOCAL_FAILURE, face.LocalError),
39 non_none_metadata = ()
if metadata
is None else metadata
40 if metadata_transformer
is None:
41 return non_none_metadata
43 return metadata_transformer(non_none_metadata)
47 return None if grpc_call_options
is None else grpc_call_options.credentials
51 code = rpc_error_call.code()
52 pair = _STATUS_CODE_TO_ABORTION_KIND_AND_ABORTION_ERROR_CLASS.get(code)
53 error_kind = face.Abortion.Kind.LOCAL_FAILURE
if pair
is None else pair[0]
54 return face.Abortion(error_kind, rpc_error_call.initial_metadata(),
55 rpc_error_call.trailing_metadata(), code,
56 rpc_error_call.details())
60 code = rpc_error_call.code()
61 pair = _STATUS_CODE_TO_ABORTION_KIND_AND_ABORTION_ERROR_CLASS.get(code)
62 exception_class = face.AbortionError
if pair
is None else pair[1]
63 return exception_class(rpc_error_call.initial_metadata(),
64 rpc_error_call.trailing_metadata(), code,
65 rpc_error_call.details())
76 def __init__(self, response_future, response_iterator, call):
99 raise future.TimeoutError()
101 raise future.CancelledError()
106 if rpc_error_call
is None:
111 raise future.TimeoutError()
113 raise future.CancelledError()
119 raise future.TimeoutError()
121 raise future.CancelledError()
150 if self.
code()
is not grpc.StatusCode.OK:
153 registered = self.
_call.add_callback(done_callback)
154 return None if registered
else done_callback()
173 protocol_options, metadata, metadata_transformer,
174 request, request_serializer, response_deserializer):
176 multi_callable = channel.unary_unary(
177 _common.fully_qualified_method(group, method),
178 request_serializer=request_serializer,
179 response_deserializer=response_deserializer)
182 response, call = multi_callable.with_call(
185 metadata=_metadata.unbeta(effective_metadata),
191 metadata=_metadata.unbeta(effective_metadata),
198 metadata, metadata_transformer, request,
199 request_serializer, response_deserializer):
200 multi_callable = channel.unary_unary(
201 _common.fully_qualified_method(group, method),
202 request_serializer=request_serializer,
203 response_deserializer=response_deserializer)
205 response_future = multi_callable.future(
208 metadata=_metadata.unbeta(effective_metadata),
210 return _Rendezvous(response_future,
None, response_future)
213 def _unary_stream(channel, group, method, timeout, protocol_options, metadata,
214 metadata_transformer, request, request_serializer,
215 response_deserializer):
216 multi_callable = channel.unary_stream(
217 _common.fully_qualified_method(group, method),
218 request_serializer=request_serializer,
219 response_deserializer=response_deserializer)
224 metadata=_metadata.unbeta(effective_metadata),
226 return _Rendezvous(
None, response_iterator, response_iterator)
230 protocol_options, metadata, metadata_transformer,
231 request_iterator, request_serializer,
232 response_deserializer):
234 multi_callable = channel.stream_unary(
235 _common.fully_qualified_method(group, method),
236 request_serializer=request_serializer,
237 response_deserializer=response_deserializer)
240 response, call = multi_callable.with_call(
243 metadata=_metadata.unbeta(effective_metadata),
249 metadata=_metadata.unbeta(effective_metadata),
256 metadata, metadata_transformer, request_iterator,
257 request_serializer, response_deserializer):
258 multi_callable = channel.stream_unary(
259 _common.fully_qualified_method(group, method),
260 request_serializer=request_serializer,
261 response_deserializer=response_deserializer)
263 response_future = multi_callable.future(
266 metadata=_metadata.unbeta(effective_metadata),
268 return _Rendezvous(response_future,
None, response_future)
272 metadata_transformer, request_iterator, request_serializer,
273 response_deserializer):
274 multi_callable = channel.stream_stream(
275 _common.fully_qualified_method(group, method),
276 request_serializer=request_serializer,
277 response_deserializer=response_deserializer)
282 metadata=_metadata.unbeta(effective_metadata),
284 return _Rendezvous(
None, response_iterator, response_iterator)
289 def __init__(self, channel, group, method, metadata_transformer,
290 request_serializer, response_deserializer):
303 protocol_options=None):
305 timeout, with_call, protocol_options,
310 def future(self, request, timeout, metadata=None, protocol_options=None):
312 timeout, protocol_options, metadata,
323 protocol_options=None):
324 raise NotImplementedError()
329 def __init__(self, channel, group, method, metadata_transformer,
330 request_serializer, response_deserializer):
338 def __call__(self, request, timeout, metadata=None, protocol_options=None):
340 protocol_options, metadata,
351 protocol_options=None):
352 raise NotImplementedError()
357 def __init__(self, channel, group, method, metadata_transformer,
358 request_serializer, response_deserializer):
371 protocol_options=None):
373 timeout, with_call, protocol_options,
383 protocol_options=None):
385 timeout, protocol_options, metadata,
395 protocol_options=None):
396 raise NotImplementedError()
401 def __init__(self, channel, group, method, metadata_transformer,
402 request_serializer, response_deserializer):
414 protocol_options=None):
416 protocol_options, metadata,
426 protocol_options=None):
427 raise NotImplementedError()
432 def __init__(self, channel, metadata_transformer, request_serializers,
433 response_deserializers):
446 protocol_options=None):
456 with_call, protocol_options, metadata,
458 request_serializer, response_deserializer)
466 protocol_options=None):
476 protocol_options, metadata,
478 request_serializer, response_deserializer)
486 protocol_options=None):
496 protocol_options, metadata,
498 request_serializer, response_deserializer)
507 protocol_options=None):
517 with_call, protocol_options, metadata,
519 request_iterator, request_serializer,
520 response_deserializer)
528 protocol_options=None):
538 protocol_options, metadata,
540 request_iterator, request_serializer,
541 response_deserializer)
549 protocol_options=None):
559 protocol_options, metadata,
561 request_serializer, response_deserializer)
571 protocol_options=None):
572 raise NotImplementedError()
582 protocol_options=None):
583 raise NotImplementedError()
592 protocol_options=None):
593 raise NotImplementedError()
602 protocol_options=None):
603 raise NotImplementedError()
617 response_deserializer)
631 response_deserializer)
645 response_deserializer)
659 response_deserializer)
670 def __init__(self, backing_generic_stub, group, cardinalities):
677 if method_cardinality
is cardinality.Cardinality.UNARY_UNARY:
679 elif method_cardinality
is cardinality.Cardinality.UNARY_STREAM:
681 elif method_cardinality
is cardinality.Cardinality.STREAM_UNARY:
683 elif method_cardinality
is cardinality.Cardinality.STREAM_STREAM:
686 raise AttributeError(
'_DynamicStub object has no attribute "%s"!' %
696 def generic_stub(channel, host, metadata_transformer, request_serializers,
697 response_deserializers):
698 return _GenericStub(channel, metadata_transformer, request_serializers,
699 response_deserializers)
702 def dynamic_stub(channel, service, cardinalities, host, metadata_transformer,
703 request_serializers, response_deserializers):
705 _GenericStub(channel, metadata_transformer, request_serializers,
706 response_deserializers), service, cardinalities)