-
Notifications
You must be signed in to change notification settings - Fork 1
/
app.py
99 lines (86 loc) · 3.25 KB
/
app.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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import flask, json
from flask import request, jsonify, send_file
from flask_cors import CORS
from flask_compress import Compress
from query import query
from scheduler import sched_gen
from draw import draw_schedule
qe = query.QueryExecutor()
sf = sched_gen.ScheduleFactory()
app = flask.Flask(__name__)
cors = CORS(app)
app.config["CORS_HEADERS"] = 'Content-Type'
app.config["DEBUG"] = True
@app.route('/', methods=['GET'])
def api_root():
return json.dumps({'success':True}), 200, {'ContentType':'app/json'}
@app.route("/api/v1/terms", methods=['GET'])
def api_terms():
return jsonify(qe.get_terms())
@app.route("/api/v1/courses/", methods=['GET'])
def api_courses():
args = request.args
if "term" not in args:
return
term_id = int(args["term"])
return jsonify(qe.get_term_courses(term_id))
@app.route("/api/v1/classes/", methods=['GET'])
def api_classes():
args = request.args
if "term" not in args or "course" not in args:
return
term_id, course_ids = int(args["term"]), args["course"]
return jsonify(qe.get_course_classes(term_id, course_ids))
@app.route("/api/v1/gen-schedules/", methods=['GET'])
def api_gen_schedules():
args = request.args
required_args = ("term", "courses")
for required_arg in required_args:
if required_arg not in args:
return
term_id, course_id_list = int(args["term"]), args["courses"]
prefs = None
if "prefs" in args:
prefs = args["prefs"]
else:
prefs = [args["evening"], args["online"], args["start"], args["consec"], args["limit"], args["blacklist"]]
response = jsonify(qe.get_schedules(term_id, course_id_list, prefs, sf))
return response
@app.route("/api/v1/rooms/", methods=['GET'])
def api_rooms():
args = request.args
if "term" not in args:
return
term_id = int(args["term"])
return jsonify(qe.get_term_rooms(term_id))
@app.route("/api/v1/room-sched/", methods=['GET'])
def api_room_sched():
args = request.args
required_args = ("term", "room")
for required_arg in required_args:
if required_arg not in args:
return
return jsonify(qe.get_room_classes(args["term"], args["room"]))
@app.route("/api/all-rooms-open/", methods=['GET'])
def api_all_avail_rooms():
# ensure good request
args = request.args
if not (args.keys() >= {"term","weekday","starttime","endtime"}):
return jsonify({"message":"provide all required query params!"}), 400
# Get all distinct classes
distinct_rooms = qe.get_available_rooms(args["term"], args["weekday"], args["starttime"], args["endtime"])
return jsonify({"available_rooms": distinct_rooms }), 200
@app.route("/api/v1/draw-sched/", methods=['GET'])
def api_draw_sched():
args = request.args
if not (args.keys() >= {"term","courses","blacklist"}):
return jsonify({"message":"provide all required query params!"}), 400
sched = qe.get_unique_schedule(args["term"], args["courses"], args["blacklist"])
imgpath = draw_schedule.draw_schedule(sched)
return send_file(imgpath, download_name='schedule.png', mimetype='image/png')
@app.route("/api/v1/last-updated", methods=['GET'])
def last_updated():
return {"lastUpdated": qe.get_last_updated()}
Compress(app)
if __name__ == "__main__":
app.run()