def handle_request(self, request: flask.Request): req = HTTPRequest.from_flask_request(request) inf_task = self.input_adapter.from_http_request(req) results = self.infer((inf_task, )) result = next(iter(results)) response = self.output_adapter.to_http_response(result) return response.to_flask_response()
def api_func(): # handle_request may raise 4xx or 5xx exception. try: if request.headers.get(MARSHAL_REQUEST_HEADER): reqs = DataLoader.split_requests(request.get_data()) responses = api.handle_batch_request(reqs) response_body = DataLoader.merge_responses(responses) response = make_response(response_body) else: req = HTTPRequest.from_flask_request(request) resp = api.handle_request(req) response = resp.to_flask_response() except BentoMLException as e: log_exception(sys.exc_info()) if 400 <= e.status_code < 500 and e.status_code not in (401, 403): response = make_response( jsonify(message= "BentoService error handling API request: %s" % str(e)), e.status_code, ) else: response = make_response('', e.status_code) except Exception: # pylint: disable=broad-except # For all unexpected error, return 500 by default. For example, # if users' model raises an error of division by zero. log_exception(sys.exc_info()) response = make_response( 'An error has occurred in BentoML user code when handling this ' 'request, find the error details in server logs', 500, ) return response
def view_function(): req = HTTPRequest.from_flask_request(request) response = api.handle_request(req) return response.to_flask_response()