-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.py
executable file
·76 lines (56 loc) · 1.49 KB
/
server.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#!/usr/bin/env python
"""
server.py
Flask server for recommender.py API
"""
from flask import Flask # type: ignore
from flask_cors import CORS # type: ignore
from flask import Response
from recommender import Recommender
from decorator import decorator
from doc2vec import Doc2VecModel
import json
import brotli
rec = Recommender()
d2v = Doc2VecModel()
app = Flask(__name__)
CORS(app)
@decorator
def brotlify(f, *args, **kwargs):
"""Brotli Flask Response Decorator"""
data = f(*args, **kwargs)
if isinstance(data, Response):
content = data.data
else:
content = data
deflated_data = brotli.compress(content)
if isinstance(data, Response):
data.data = deflated_data
data.headers['Content-Encoding'] = 'br'
data.headers['Content-Length'] = str(len(data.data))
return data
return deflated_data
@app.route("/movies")
@brotlify
def movies() -> Response:
return Response(
json.dumps(rec.get_movies()),
mimetype='application/json'
)
@app.route("/recommend/<string:title>")
@brotlify
def recommend(title: str) -> Response:
return Response(
json.dumps(rec.recommend(title)),
mimetype='application/json'
)
@app.route("/recommend-d2v/<string:title>")
@brotlify
def recommend_d2v(title: str) -> Response:
return Response(
json.dumps(d2v.recommendation(title, 10)),
mimetype='application/json'
)
if __name__ == "__main__":
app.run(host="0.0.0.0",
port=5000)