[Serve] Unwrap Flask Request from ServeHandle (#10845)

This commit is contained in:
Simon Mo
2020-09-22 12:44:23 -07:00
committed by GitHub
parent 970fc37173
commit 7fbe076813
3 changed files with 42 additions and 1 deletions
+22
View File
@@ -84,6 +84,28 @@ def test_handle_http_args(serve_instance):
resp["headers"]["X-Custom-Header"] == "value"
def test_handle_inject_flask_request(serve_instance):
client = serve_instance
def echo_request_type(request):
return str(type(request))
client.create_backend("echo:v0", echo_request_type)
client.create_endpoint("echo", backend="echo:v0", route="/echo")
def wrapper_model(web_request):
handle = serve.connect().get_handle("echo")
return ray.get(handle.remote(web_request))
client.create_backend("wrapper:v0", wrapper_model)
client.create_endpoint("wrapper", backend="wrapper:v0", route="/wrapper")
for route in ["/echo", "/wrapper"]:
resp = requests.get(f"http://127.0.0.1:8000{route}")
request_type = resp.text
assert request_type == "<class 'flask.wrappers.Request'>"
if __name__ == "__main__":
import sys
import pytest
+9 -1
View File
@@ -15,6 +15,7 @@ from collections import UserDict
import requests
import numpy as np
import pydantic
import flask
import ray
from ray.serve.constants import HTTP_PROXY_TIMEOUT
@@ -88,8 +89,15 @@ def parse_request_item(request_item):
asgi_scope, body_bytes = request_item.args
return build_flask_request(asgi_scope, io.BytesIO(body_bytes))
else:
arg = request_item.args[0] if len(request_item.args) == 1 else None
# If the input data from handle is web request, we don't need to wrap
# it in ServeRequest.
if isinstance(arg, flask.Request):
return arg
return ServeRequest(
request_item.args[0] if len(request_item.args) == 1 else None,
arg,
request_item.kwargs,
headers=request_item.metadata.http_headers,
method=request_item.metadata.http_method,