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
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)
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, )
def set_trailing_metadata(self, trailing_metadata): self._trailing_metadata = protocol.encode_headers(trailing_metadata)
def send_initial_metadata(self, initial_metadata): self._initial_metadata = protocol.encode_headers(initial_metadata)
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) ]