From 8a7b5a75efa8010227db79fd2a09b1a2645db058 Mon Sep 17 00:00:00 2001 From: Bouke van der Bijl Date: Wed, 19 Apr 2023 12:05:19 +0200 Subject: [PATCH] Fix trailer encoding --- sonora/asgi.py | 4 ++-- sonora/protocol.py | 9 ++++++--- sonora/wsgi.py | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/sonora/asgi.py b/sonora/asgi.py index 057fbd2..9cbd2cd 100644 --- a/sonora/asgi.py +++ b/sonora/asgi.py @@ -210,11 +210,11 @@ async def _do_unary_response( else: message_data = b"" - trailers = [(b"grpc-status", str(context.code.value[0]).encode())] + trailers = [("grpc-status", str(context.code.value[0]))] if context.details: trailers.append( - (b"grpc-message", quote(context.details.encode("utf8")).encode("ascii")) + ("grpc-message", quote(context.details)) ) if context._trailing_metadata: diff --git a/sonora/protocol.py b/sonora/protocol.py index c3ed574..db0fd7d 100644 --- a/sonora/protocol.py +++ b/sonora/protocol.py @@ -121,11 +121,14 @@ async def unwrap_message_asgi(receive, decoder=None): def pack_trailers(trailers): - message = [] + data = bytearray() for k, v in trailers: k = k.lower() - message.append(f"{k}: {v}\r\n".encode("ascii")) - return b"".join(message) + data.extend(k.encode('utf8')) + data.extend(b': ') + data.extend(v.encode('utf8')) + data.extend(b'\r\n') + return bytes(data) def unpack_trailers(message): diff --git a/sonora/wsgi.py b/sonora/wsgi.py index b54d219..d2f21d3 100644 --- a/sonora/wsgi.py +++ b/sonora/wsgi.py @@ -180,7 +180,7 @@ def _do_unary_response( trailers = [("grpc-status", str(context.code.value[0]))] if context.details: - trailers.append(("grpc-message", quote(context.details.encode("utf8")))) + trailers.append(("grpc-message", quote(context.details))) if context._trailing_metadata: trailers.extend(context._trailing_metadata)