コード例 #1
0
ファイル: wsgi.py プロジェクト: lidizheng/sonora
    def _do_unary_response(self, rpc_method, start_response, context, headers,
                           resp):
        if resp:
            message_data = protocol.wrap_message(
                False, False, rpc_method.response_serializer(resp))
        else:
            message_data = b""

        if context._trailing_metadata:
            trailers = protocol.encode_headers(context._trailing_metadata)
            trailer_message = protocol.pack_trailers(trailers)
            trailer_data = protocol.wrap_message(True, False, trailer_message)
        else:
            trailer_data = b""

        content_length = len(message_data) + len(trailer_data)

        headers.append(("content-length", str(content_length)))

        headers.append(("grpc-status", str(context.code.value[0])))

        if context.details:
            headers.append(("grpc-message", quote(context.details)))

        if context._initial_metadata:
            headers.extend(protocol.encode_headers(context._initial_metadata))

        start_response(_grpc_status_to_wsgi_status(context.code), headers)
        yield message_data
        yield trailer_data
コード例 #2
0
ファイル: wsgi.py プロジェクト: lidizheng/sonora
    def _do_streaming_response(self, rpc_method, start_response, context,
                               headers, resp):

        try:
            first_message = next(resp)
        except grpc.RpcError:
            pass

        if context._initial_metadata:
            headers.extend(protocol.encode_headers(context._initial_metadata))

        start_response(_grpc_status_to_wsgi_status(context.code), headers)

        yield protocol.wrap_message(
            False, False, rpc_method.response_serializer(first_message))

        try:
            for message in resp:
                yield protocol.wrap_message(
                    False, False, rpc_method.response_serializer(message))
        except grpc.RpcError:
            pass

        trailers = [("grpc-status", str(context.code.value[0]))]

        if context.details:
            trailers.append(("grpc-message", quote(context.details)))

        if context._trailing_metadata:
            trailers.extend(protocol.encode_headers(
                context._trailing_metadata))

        trailer_message = protocol.pack_trailers(trailers)

        yield protocol.wrap_message(True, False, trailer_message)
コード例 #3
0
    def __call__(self, request, timeout=None, metadata=None):
        call_metadata = self._metadata.copy()
        if metadata is not None:
            call_metadata.extend(protocol.encode_headers(metadata))

        return UnaryStreamCall(
            request,
            timeout,
            call_metadata,
            self._rpc_url,
            self._session,
            self._serializer,
            self._deserializer,
        )
コード例 #4
0
ファイル: wsgi.py プロジェクト: public/sonora
 def set_trailing_metadata(self, trailing_metadata):
     self._trailing_metadata = protocol.encode_headers(trailing_metadata)
コード例 #5
0
ファイル: wsgi.py プロジェクト: public/sonora
 def send_initial_metadata(self, initial_metadata):
     self._initial_metadata = protocol.encode_headers(initial_metadata)
コード例 #6
0
ファイル: asgi.py プロジェクト: public/sonora
 async def send_initial_metadata(self, initial_metadata):
     self._initial_metadata = [
         (key.encode("ascii"), value.encode("utf8"))
         for key, value in protocol.encode_headers(initial_metadata)
     ]