46 lines
1.1 KiB
Python
46 lines
1.1 KiB
Python
import logging
|
|
from typing import Callable
|
|
|
|
from flask import Flask, request, jsonify
|
|
|
|
from image_prediction.config import CONFIG
|
|
|
|
logger = logging.getLogger(__name__)
|
|
logger.setLevel(CONFIG.service.logging_level)
|
|
|
|
|
|
def make_prediction_server(predict_fn: Callable):
|
|
|
|
app = Flask(__name__)
|
|
|
|
@app.route("/ready", methods=["GET"])
|
|
def ready():
|
|
resp = jsonify("OK")
|
|
resp.status_code = 200
|
|
return resp
|
|
|
|
@app.route("/health", methods=["GET"])
|
|
def healthy():
|
|
resp = jsonify("OK")
|
|
resp.status_code = 200
|
|
return resp
|
|
|
|
@app.route("/", methods=["POST"])
|
|
def predict():
|
|
pdf = request.data
|
|
|
|
logger.debug("Running predictor on document...")
|
|
try:
|
|
predictions = predict_fn(pdf)
|
|
response = jsonify(predictions)
|
|
logger.info("Analysis completed.")
|
|
return response
|
|
except Exception as err:
|
|
logger.error("Analysis failed.")
|
|
logger.exception(err)
|
|
response = jsonify("Analysis failed.")
|
|
response.status_code = 500
|
|
return response
|
|
|
|
return app
|