glimpse / app.py
Guangsheng Bao
update classifier
382f974
import flask
from flask_cors import CORS
from concurrent.futures import ThreadPoolExecutor
import json
import datetime
import weave
from detector_base import get_detector
# app = flask.Flask(__name__)
app = flask.Flask(__name__, static_folder='./dist', static_url_path='/')
CORS(app, supports_credentials=True)
executor = ThreadPoolExecutor(10)
def return_data(code, msg, data, cookie="", ToNone=True):
if ToNone and len(data) <= 0:
data = None
jsonStr = {
'code': code,
'msg': msg,
'data': data
}
response = flask.make_response(flask.jsonify(jsonStr))
if cookie:
for key, value in cookie.items():
response.set_cookie(key, value, max_age=3600 * 12)
return response
@weave.op()
def process_request(text, detector):
return detector.compute_prob(text)
def handle_request(detector_name):
# request data
if flask.request.method == 'POST':
try:
data = flask.request.data.decode('utf-8')
except Exception as ex:
print(datetime.datetime.now().isoformat(), ex, flush=True)
return return_data(400, 'Bad request', str(ex))
else:
return return_data(0, '', {})
# handle request
info = {}
sentence = json.loads(data)
data = {"sentence": sentence}
print(datetime.datetime.now().isoformat(), data, flush=True)
try:
text = data["sentence"]
detector = get_detector(detector_name)
future = executor.submit(process_request, text, detector)
prob, crit, ntoken = future.result()
info["crit"] = crit
info["prob"] = prob
info["ntoken"] = ntoken
print(datetime.datetime.now().isoformat(), info, flush=True)
return return_data(0, '', info)
except Exception as ex:
print(datetime.datetime.now().isoformat(), ex, flush=True)
return return_data(400, 'Bad request', str(ex))
@app.route("/glimpse", methods=["GET", "POST"])
def glimpse():
return handle_request("glimpse")
@app.route("/", methods=["GET"])
def index():
return app.send_static_file('index.html')
if __name__ == '__main__':
# initialize detectors
detectors = ['glimpse']
for detector_name in detectors:
get_detector(detector_name)
# service
weave.init('Glimpse')
app.run(host='0.0.0.0', port=7860)