1414 ClientMessage ,
1515 TriggerRequest ,
1616 TriggerResponse ,
17+ HeaderValue ,
1718 HttpResponseContext ,
1819 TopicResponseContext ,
1920)
@@ -70,12 +71,13 @@ def _grpc_response_from_ctx(ctx: TriggerContext) -> TriggerResponse:
7071 """
7172 if ctx .http ():
7273 ctx = ctx .http ()
74+ headers = {k : HeaderValue (value = v ) for (k , v ) in ctx .res .headers .items ()}
75+ headers_old = {k : v [0 ] for (k , v ) in ctx .res .headers .items ()}
76+ data = ctx .res .body if ctx .res .body else bytes ()
77+
7378 return TriggerResponse (
74- data = ctx .res .body ,
75- http = HttpResponseContext (
76- status = ctx .res .status ,
77- headers = ctx .res .headers ,
78- ),
79+ data = data ,
80+ http = HttpResponseContext (status = ctx .res .status , headers = headers , headers_old = headers_old ),
7981 )
8082 elif ctx .event ():
8183 ctx = ctx .event ()
@@ -115,7 +117,18 @@ def __init__(self, status: int = 200, headers: Record = None, body: bytes = None
115117 """Construct a new HttpResponse."""
116118 self .status = status
117119 self .headers = headers if headers else {}
118- self .body = body if body else bytes ()
120+ self ._body = body if body else bytes ()
121+
122+ @property
123+ def body (self ):
124+ return self ._body
125+
126+ @body .setter
127+ def body (self , value : Union [str , bytes ]):
128+ if isinstance (value , str ):
129+ self ._body = value .encode ("utf-8" )
130+ else :
131+ self ._body = value
119132
120133
121134class HttpContext (TriggerContext ):
@@ -135,7 +148,7 @@ def http(self) -> HttpContext:
135148 def from_grpc_trigger_request (trigger_request : TriggerRequest ) -> HttpContext :
136149 """Construct a new HttpContext from an Http trigger from the Nitric Membrane."""
137150 if len (trigger_request .http .headers .keys ()) > 0 :
138- headers = {k : v [ 0 ] .value for (k , v ) in trigger_request .http .headers .items ()}
151+ headers = {k : v .value for (k , v ) in trigger_request .http .headers .items ()}
139152 else :
140153 headers = trigger_request .http .headers_old
141154
@@ -334,6 +347,7 @@ async def _run(self):
334347 else :
335348 func = self ._any_handler
336349 response_ctx = (await func (ctx )) if asyncio .iscoroutinefunction (func ) else func (ctx )
350+
337351 # Send function response back to server
338352 await request_channel .send (
339353 ClientMessage (
0 commit comments