예제 #1
0
    def __call__(self,
                 request: Any,
                 *,
                 timeout: Optional[float] = None,
                 metadata: Optional[MetadataType] = _IMMUTABLE_EMPTY_TUPLE,
                 credentials: Optional[grpc.CallCredentials] = None,
                 wait_for_ready: Optional[bool] = None,
                 compression: Optional[grpc.Compression] = None
                ) -> _base_call.UnaryUnaryCall:
        if compression:
            metadata = _compression.augment_metadata(metadata, compression)

        if not self._interceptors:
            call = UnaryUnaryCall(request, _timeout_to_deadline(timeout),
                                  metadata, credentials, wait_for_ready,
                                  self._channel, self._method,
                                  self._request_serializer,
                                  self._response_deserializer, self._loop)
        else:
            call = InterceptedUnaryUnaryCall(
                self._interceptors, request, timeout, metadata, credentials,
                wait_for_ready, self._channel, self._method,
                self._request_serializer, self._response_deserializer,
                self._loop)

        return call
예제 #2
0
 def __call__(self,
              request_iterator,
              timeout=None,
              metadata=None,
              credentials=None,
              wait_for_ready=None,
              compression=None):
     deadline = _deadline(timeout)
     state = _RPCState(_STREAM_STREAM_INITIAL_DUE, None, None, None, None)
     initial_metadata_flags = _InitialMetadataFlags().with_wait_for_ready(
         wait_for_ready)
     augmented_metadata = _compression.augment_metadata(
         metadata, compression)
     operationses = (
         (
             cygrpc.SendInitialMetadataOperation(augmented_metadata,
                                                 initial_metadata_flags),
             cygrpc.ReceiveStatusOnClientOperation(_EMPTY_FLAGS),
         ),
         (cygrpc.ReceiveInitialMetadataOperation(_EMPTY_FLAGS), ),
     )
     event_handler = _event_handler(state, self._response_deserializer)
     call = self._managed_call(
         cygrpc.PropagationConstants.GRPC_PROPAGATE_DEFAULTS, self._method,
         None, _determine_deadline(deadline), augmented_metadata,
         None if credentials is None else credentials._credentials,
         operationses, event_handler, self._context)
     _consume_request_iterator(request_iterator, state, call,
                               self._request_serializer, event_handler)
     return _Rendezvous(state, call, self._response_deserializer, deadline)
예제 #3
0
    def _blocking(self, request_iterator, timeout, metadata, credentials,
                  wait_for_ready, compression):
        deadline = _deadline(timeout)
        state = _RPCState(_STREAM_UNARY_INITIAL_DUE, None, None, None, None)
        initial_metadata_flags = _InitialMetadataFlags().with_wait_for_ready(
            wait_for_ready)
        augmented_metadata = _compression.augment_metadata(
            metadata, compression)

        call = self._channel.segregated_call(
            cygrpc.PropagationConstants.GRPC_PROPAGATE_DEFAULTS, self._method,
            None, _determine_deadline(deadline), augmented_metadata,
            None if credentials is None else credentials._credentials,
            _stream_unary_invocation_operationses_and_tags(
                augmented_metadata, initial_metadata_flags), self._context)
        _consume_request_iterator(request_iterator, state, call,
                                  self._request_serializer, None)
        while True:
            event = call.next_event()
            with state.condition:
                _handle_event(event, state, self._response_deserializer)
                state.condition.notify_all()
                if not state.due:
                    break
        return state, call
예제 #4
0
 def future(self,
            request_iterator,
            timeout=None,
            metadata=None,
            credentials=None,
            wait_for_ready=None,
            compression=None):
     deadline = _deadline(timeout)
     state = _RPCState(_STREAM_UNARY_INITIAL_DUE, None, None, None, None)
     event_handler = _event_handler(state, self._response_deserializer)
     initial_metadata_flags = _InitialMetadataFlags().with_wait_for_ready(
         wait_for_ready)
     augmented_metadata = _compression.augment_metadata(
         metadata, compression)
     call = self._channel.managed_call(
         cygrpc.PropagationConstants.GRPC_PROPAGATE_DEFAULTS, self._method,
         None, deadline, augmented_metadata,
         None if credentials is None else credentials._credentials,
         _stream_unary_invocation_operationses(metadata,
                                               initial_metadata_flags),
         event_handler, self._context)
     _consume_request_iterator(request_iterator, state, call,
                               self._request_serializer, event_handler)
     return _MultiThreadedRendezvous(state, call,
                                     self._response_deserializer, deadline)
예제 #5
0
파일: _channel.py 프로젝트: sitianchao/grpc
 def __call__(self,
              request_iterator,
              timeout=None,
              metadata=None,
              credentials=None,
              wait_for_ready=None,
              compression=None):
     deadline = _deadline(timeout)
     state = _RPCState(_STREAM_STREAM_INITIAL_DUE, None, None, None, None)
     initial_metadata_flags = _InitialMetadataFlags().with_wait_for_ready(
         wait_for_ready)
     augmented_metadata = _compression.augment_metadata(
         metadata, compression)
     operationses = (
         (
             cygrpc.SendInitialMetadataOperation(augmented_metadata,
                                                 initial_metadata_flags),
             cygrpc.ReceiveStatusOnClientOperation(_EMPTY_FLAGS),
         ),
         (cygrpc.ReceiveInitialMetadataOperation(_EMPTY_FLAGS),),
     )
     event_handler = _event_handler(state, self._response_deserializer)
     call = self._managed_call(
         cygrpc.PropagationConstants.GRPC_PROPAGATE_DEFAULTS, self._method,
         None, _determine_deadline(deadline), augmented_metadata, None
         if credentials is None else credentials._credentials, operationses,
         event_handler, self._context)
     _consume_request_iterator(request_iterator, state, call,
                               self._request_serializer, event_handler)
     return _Rendezvous(state, call, self._response_deserializer, deadline)
예제 #6
0
 def _init_metadata(
         metadata: Optional[Metadata] = None,
         compression: Optional[grpc.Compression] = None) -> Metadata:
     """Based on the provided values for <metadata> or <compression> initialise the final
     metadata, as it should be used for the current call.
     """
     metadata = metadata or Metadata()
     if compression:
         metadata = Metadata(
             *_compression.augment_metadata(metadata, compression))
     return metadata
예제 #7
0
파일: _channel.py 프로젝트: soccerhui/grpc
    def __call__(
        self,
        request: Any,
        *,
        timeout: Optional[float] = None,
        metadata: Optional[MetadataType] = _IMMUTABLE_EMPTY_TUPLE,
        credentials: Optional[grpc.CallCredentials] = None,
        wait_for_ready: Optional[bool] = None,
        compression: Optional[grpc.Compression] = None
    ) -> _base_call.UnaryUnaryCall:
        """Asynchronously invokes the underlying RPC.

        Args:
          request: The request value for the RPC.
          timeout: An optional duration of time in seconds to allow
            for the RPC.
          metadata: Optional :term:`metadata` to be transmitted to the
            service-side of the RPC.
          credentials: An optional CallCredentials for the RPC. Only valid for
            secure Channel.
          wait_for_ready: This is an EXPERIMENTAL argument. An optional
            flag to enable wait for ready mechanism
          compression: An element of grpc.compression, e.g.
            grpc.compression.Gzip. This is an EXPERIMENTAL option.

        Returns:
          A Call object instance which is an awaitable object.

        Raises:
          RpcError: Indicating that the RPC terminated with non-OK status. The
            raised RpcError will also be a Call for the RPC affording the RPC's
            metadata, status code, and details.
        """
        if compression:
            metadata = _compression.augment_metadata(metadata, compression)

        if not self._interceptors:
            call = UnaryUnaryCall(request, _timeout_to_deadline(timeout),
                                  metadata, credentials, wait_for_ready,
                                  self._channel, self._method,
                                  self._request_serializer,
                                  self._response_deserializer, self._loop)
        else:
            call = InterceptedUnaryUnaryCall(
                self._interceptors, request, timeout, metadata, credentials,
                wait_for_ready, self._channel, self._method,
                self._request_serializer, self._response_deserializer,
                self._loop)

        self._ongoing_calls.trace_call(call)
        return call
예제 #8
0
    def __call__(self,
                 request_iterator: Optional[RequestIterableType] = None,
                 timeout: Optional[float] = None,
                 metadata: Optional[MetadataType] = _IMMUTABLE_EMPTY_TUPLE,
                 credentials: Optional[grpc.CallCredentials] = None,
                 wait_for_ready: Optional[bool] = None,
                 compression: Optional[grpc.Compression] = None
                ) -> _base_call.StreamStreamCall:
        if compression:
            metadata = _compression.augment_metadata(metadata, compression)

        deadline = _timeout_to_deadline(timeout)

        call = StreamStreamCall(request_iterator, deadline, metadata,
                                credentials, wait_for_ready, self._channel,
                                self._method, self._request_serializer,
                                self._response_deserializer, self._loop)

        return call
예제 #9
0
 def _prepare(self, request, timeout, metadata, wait_for_ready, compression):
     deadline, serialized_request, rendezvous = _start_unary_request(
         request, timeout, self._request_serializer)
     initial_metadata_flags = _InitialMetadataFlags().with_wait_for_ready(
         wait_for_ready)
     augmented_metadata = _compression.augment_metadata(
         metadata, compression)
     if serialized_request is None:
         return None, None, None, rendezvous
     else:
         state = _RPCState(_UNARY_UNARY_INITIAL_DUE, None, None, None, None)
         operations = (
             cygrpc.SendInitialMetadataOperation(augmented_metadata,
                                                 initial_metadata_flags),
             cygrpc.SendMessageOperation(serialized_request, _EMPTY_FLAGS),
             cygrpc.SendCloseFromClientOperation(_EMPTY_FLAGS),
             cygrpc.ReceiveInitialMetadataOperation(_EMPTY_FLAGS),
             cygrpc.ReceiveMessageOperation(_EMPTY_FLAGS),
             cygrpc.ReceiveStatusOnClientOperation(_EMPTY_FLAGS),
         )
         return state, operations, deadline, None
예제 #10
0
파일: _channel.py 프로젝트: sitianchao/grpc
 def _prepare(self, request, timeout, metadata, wait_for_ready, compression):
     deadline, serialized_request, rendezvous = _start_unary_request(
         request, timeout, self._request_serializer)
     initial_metadata_flags = _InitialMetadataFlags().with_wait_for_ready(
         wait_for_ready)
     augmented_metadata = _compression.augment_metadata(
         metadata, compression)
     if serialized_request is None:
         return None, None, None, rendezvous
     else:
         state = _RPCState(_UNARY_UNARY_INITIAL_DUE, None, None, None, None)
         operations = (
             cygrpc.SendInitialMetadataOperation(augmented_metadata,
                                                 initial_metadata_flags),
             cygrpc.SendMessageOperation(serialized_request, _EMPTY_FLAGS),
             cygrpc.SendCloseFromClientOperation(_EMPTY_FLAGS),
             cygrpc.ReceiveInitialMetadataOperation(_EMPTY_FLAGS),
             cygrpc.ReceiveMessageOperation(_EMPTY_FLAGS),
             cygrpc.ReceiveStatusOnClientOperation(_EMPTY_FLAGS),
         )
         return state, operations, deadline, None
예제 #11
0
    def __call__(self,
                 request,
                 timeout=None,
                 metadata=None,
                 credentials=None,
                 wait_for_ready=None,
                 compression=None):
        deadline, serialized_request, rendezvous = _start_unary_request(
            request, timeout, self._request_serializer)
        initial_metadata_flags = _InitialMetadataFlags().with_wait_for_ready(
            wait_for_ready)
        if serialized_request is None:
            raise rendezvous
        else:
            augmented_metadata = _compression.augment_metadata(
                metadata, compression)
            state = _RPCState(_UNARY_STREAM_INITIAL_DUE, None, None, None,
                              None)
            operationses = (
                (
                    cygrpc.SendInitialMetadataOperation(
                        augmented_metadata, initial_metadata_flags),
                    cygrpc.SendMessageOperation(serialized_request,
                                                _EMPTY_FLAGS),
                    cygrpc.SendCloseFromClientOperation(_EMPTY_FLAGS),
                    cygrpc.ReceiveStatusOnClientOperation(_EMPTY_FLAGS),
                ),
                (cygrpc.ReceiveInitialMetadataOperation(_EMPTY_FLAGS), ),
            )

            call = self._channel.managed_call(
                cygrpc.PropagationConstants.GRPC_PROPAGATE_DEFAULTS,
                self._method, None, _determine_deadline(deadline), metadata,
                None if credentials is None else credentials._credentials,
                operationses, _event_handler(state,
                                             self._response_deserializer),
                self._context)
            return _MultiThreadedRendezvous(state, call,
                                            self._response_deserializer,
                                            deadline)
예제 #12
0
파일: _channel.py 프로젝트: xulichen/grpc
    def __call__(
        self,
        request: Any,
        *,
        timeout: Optional[float] = None,
        metadata: Optional[MetadataType] = _IMMUTABLE_EMPTY_TUPLE,
        credentials: Optional[grpc.CallCredentials] = None,
        wait_for_ready: Optional[bool] = None,
        compression: Optional[grpc.Compression] = None
    ) -> _base_call.UnaryStreamCall:
        """Asynchronously invokes the underlying RPC.

        Args:
          request: The request value for the RPC.
          timeout: An optional duration of time in seconds to allow
            for the RPC.
          metadata: Optional :term:`metadata` to be transmitted to the
            service-side of the RPC.
          credentials: An optional CallCredentials for the RPC. Only valid for
            secure Channel.
          wait_for_ready: This is an EXPERIMENTAL argument. An optional
            flag to enable wait for ready mechanism
          compression: An element of grpc.compression, e.g.
            grpc.compression.Gzip. This is an EXPERIMENTAL option.

        Returns:
          A Call object instance which is an awaitable object.
        """
        if compression:
            metadata = _compression.augment_metadata(metadata, compression)

        deadline = _timeout_to_deadline(timeout)

        call = UnaryStreamCall(request, deadline, metadata, credentials,
                               wait_for_ready, self._channel, self._method,
                               self._request_serializer,
                               self._response_deserializer, self._loop)

        return call
예제 #13
0
파일: _channel.py 프로젝트: sitianchao/grpc
 def __call__(  # pylint: disable=too-many-locals
         self,
         request,
         timeout=None,
         metadata=None,
         credentials=None,
         wait_for_ready=None,
         compression=None):
     deadline, serialized_request, rendezvous = _start_unary_request(
         request, timeout, self._request_serializer)
     initial_metadata_flags = _InitialMetadataFlags().with_wait_for_ready(
         wait_for_ready)
     if serialized_request is None:
         raise rendezvous  # pylint: disable-msg=raising-bad-type
     else:
         augmented_metadata = _compression.augment_metadata(
             metadata, compression)
         state = _RPCState(_UNARY_STREAM_INITIAL_DUE, None, None, None, None)
         operationses = (
             (
                 cygrpc.SendInitialMetadataOperation(augmented_metadata,
                                                     initial_metadata_flags),
                 cygrpc.SendMessageOperation(serialized_request,
                                             _EMPTY_FLAGS),
                 cygrpc.SendCloseFromClientOperation(_EMPTY_FLAGS),
                 cygrpc.ReceiveStatusOnClientOperation(_EMPTY_FLAGS),
             ),
             (cygrpc.ReceiveInitialMetadataOperation(_EMPTY_FLAGS),),
         )
         call = self._managed_call(
             cygrpc.PropagationConstants.GRPC_PROPAGATE_DEFAULTS,
             self._method, None, _determine_deadline(deadline), metadata,
             None if credentials is None else
             credentials._credentials, operationses,
             _event_handler(state,
                            self._response_deserializer), self._context)
         return _Rendezvous(state, call, self._response_deserializer,
                            deadline)
예제 #14
0
파일: _channel.py 프로젝트: sitianchao/grpc
 def future(self,
            request_iterator,
            timeout=None,
            metadata=None,
            credentials=None,
            wait_for_ready=None,
            compression=None):
     deadline = _deadline(timeout)
     state = _RPCState(_STREAM_UNARY_INITIAL_DUE, None, None, None, None)
     event_handler = _event_handler(state, self._response_deserializer)
     initial_metadata_flags = _InitialMetadataFlags().with_wait_for_ready(
         wait_for_ready)
     augmented_metadata = _compression.augment_metadata(
         metadata, compression)
     call = self._managed_call(
         cygrpc.PropagationConstants.GRPC_PROPAGATE_DEFAULTS, self._method,
         None, deadline, augmented_metadata, None
         if credentials is None else credentials._credentials,
         _stream_unary_invocation_operationses(
             metadata, initial_metadata_flags), event_handler, self._context)
     _consume_request_iterator(request_iterator, state, call,
                               self._request_serializer, event_handler)
     return _Rendezvous(state, call, self._response_deserializer, deadline)
예제 #15
0
파일: _channel.py 프로젝트: sitianchao/grpc
 def _blocking(self, request_iterator, timeout, metadata, credentials,
               wait_for_ready, compression):
     deadline = _deadline(timeout)
     state = _RPCState(_STREAM_UNARY_INITIAL_DUE, None, None, None, None)
     initial_metadata_flags = _InitialMetadataFlags().with_wait_for_ready(
         wait_for_ready)
     augmented_metadata = _compression.augment_metadata(
         metadata, compression)
     call = self._channel.segregated_call(
         cygrpc.PropagationConstants.GRPC_PROPAGATE_DEFAULTS, self._method,
         None, _determine_deadline(deadline), augmented_metadata, None
         if credentials is None else credentials._credentials,
         _stream_unary_invocation_operationses_and_tags(
             augmented_metadata, initial_metadata_flags), self._context)
     _consume_request_iterator(request_iterator, state, call,
                               self._request_serializer, None)
     while True:
         event = call.next_event()
         with state.condition:
             _handle_event(event, state, self._response_deserializer)
             state.condition.notify_all()
             if not state.due:
                 break
     return state, call