-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.py
109 lines (95 loc) · 3.8 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
100
101
102
103
104
105
106
107
108
109
from flask import Flask, request, render_template, redirect, url_for
from analyzer import PlaylistAnalyzer, update_result, get_unlocked
from admin import update_artists
import sys
import logging
app = Flask(__name__)
app.debug = True
log = logging.getLogger('werkzeug')
log.disabled = True
analyzers = {}
@app.route('/', methods=['GET'])
def index():
print("started")
return render_template('index.html')
@app.route('/', methods=['POST'])
def submit_link():
print("Clicked", file=sys.stdout)
url = request.form['playlist-url']
print(url, file=sys.stderr)
if url.startswith('open.spotify.com/playlist/') \
or url.startswith('https://open.spotify.com/playlist/') \
or url.startswith('http://open.spotify.com/playlist/'):
start_index = url.index('open.spotify.com/playlist/') + len('open.spotify.com/playlist/')
end_index = len(url)
if '?si=' in url:
end_index = url.index('?si=')
id = url[start_index:end_index]
return redirect(id)
else:
return render_template('index.html', error_msg="Your playlist must be a Spotify playlist link.")
@app.route('/<playlist_id>')
def analyze_playlist(playlist_id):
global analyzers
if(playlist_id in analyzers and isinstance(analyzers[playlist_id], PlaylistAnalyzer)):
analyzers[playlist_id] = None
analyzers[playlist_id] = PlaylistAnalyzer(playlist_id)
analyzers[playlist_id].start()
return render_template('loading.html', id=playlist_id)
@app.route('/analyzer-progress/<playlist_id>')
def get_progress(playlist_id):
global analyzers
if(playlist_id in analyzers):
return str(analyzers[playlist_id].progress)
else:
return "0"
@app.route('/analyzer-result/<playlist_id>')
def get_analyzer_result(playlist_id):
global analyzers
if(playlist_id in analyzers):
return analyzers[playlist_id].result
@app.route('/<playlist_id>/info/')
def get_playlist_info(playlist_id):
global analyzers
if(playlist_id in analyzers):
if analyzers[playlist_id].playlist != None:
return analyzers[playlist_id].playlist
else:
return ""
else:
return ""
@app.route('/<playlist_id>/result/')
def display_result(playlist_id):
global analyzers
if(playlist_id in analyzers):
result = analyzers[playlist_id].result
# analyzers[playlist_id] = None
return render_template('results.html', id=playlist_id, result=result, playlist=analyzers[playlist_id].playlist, \
recs=analyzers[playlist_id].recs, num_recs=analyzers[playlist_id].num_recs)
else:
return redirect(url_for('analyze_playlist', playlist_id=playlist_id))
@app.route('/<playlist_id>/artists/')
def get_artists(playlist_id):
global analyzers
if(playlist_id in analyzers):
return analyzers[playlist_id].artists
else:
return ""
@app.route('/<playlist_id>/check-us/')
def check_data(playlist_id):
global analyzers
if(playlist_id in analyzers):
return render_template('check_data.html', artists=get_unlocked(analyzers[playlist_id].artists))
else:
return redirect(url_for('analyze_playlist', playlist_id=playlist_id))
@app.route('/<playlist_id>/check-us/', methods=['POST'])
def change_artists(playlist_id):
if(playlist_id in analyzers):
update_artists(request.json)
analyzers[playlist_id].artists = update_result(analyzers[playlist_id].artists, request.json)
return redirect(url_for('display_result', playlist_id=playlist_id))
else:
return redirect(url_for('analyze_playlist', playlist_id=playlist_id))
# TODO: Update percentage on top of page
if __name__ == '__main__':
app.run(threaded=True)