Skip to content

Commit 941efa2

Browse files
authored
Merge pull request #53 from nitrictech/fix/http-context
Fix http response handling
2 parents 3b3e8b3 + adab42c commit 941efa2

1 file changed

Lines changed: 21 additions & 7 deletions

File tree

nitric/faas.py

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
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

121134
class 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

Comments
 (0)