-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.py
85 lines (71 loc) · 2.95 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
import sys
from datetime import datetime
from flask import Flask, Response, render_template, url_for, request, redirect
from flask_sqlalchemy import SQLAlchemy
from port import PortPlaylist
from config import Config
app = Flask(__name__)
app.config.from_object(Config)
app.static_folder = 'static'
app.template_folder = 'templates'
db = SQLAlchemy(app)
port = PortPlaylist(app.config['SPOTIFY_CLIENT_ID'],
app.config['SPOTIFY_CLIENT_SECRET'],
app.config['APPLE_TEAM_ID'],
app.config['APPLE_SECRET_KEY'],
app.config['APPLE_KEY_ID'])
class Playlist(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100), nullable=False)
description = db.Column(db.String(500))
spotify_link = db.Column(db.String(100), nullable=False)
apple_link = db.Column(db.String(100), nullable=False)
date_added = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
def __repr__(self):
return '<Playlist %r>' % self.name
@app.route('/')
def index():
return redirect(url_for('playlist'))
@app.route('/login', methods=['POST'])
def login():
# Reload port every time user logs in to ensure API tokens remain valid
port.refresh_dev_tokens()
port.set_a_user_token(request.json['Music-User-Token'])
resp = Response(status=204)
return resp
@app.route('/playlist/', methods=['GET', 'POST'])
@app.route('/playlist/<int:id>', methods=['DELETE'])
def playlist(playlist_id=None):
if request.method == 'POST':
resp = port.port_playlist(request.form['spotifyLink'],
request.form['applePlaylistName'],
description=request.form['applePlaylistDesc'])
spotify_link = request.form['spotifyLink']
apple_link = resp['data'][0]['href']
name = request.form['applePlaylistName']
desc = request.form['applePlaylistDesc']
new_playlist = Playlist(name=name, description=desc,
spotify_link=spotify_link, apple_link=apple_link)
try:
db.session.add(new_playlist)
db.session.commit()
except:
return 'Something went wrong inserting into database.'
return redirect(url_for('history'))
if request.method == 'DELETE':
playlist_to_delete = Playlist.query.get_or_404(playlist_id)
print(playlist_to_delete, file=sys.stderr)
try:
db.session.delete(playlist_to_delete)
db.session.commit()
except:
return 'Something went wrong deleting.'
resp = Response(status=204)
return resp
return render_template('playlist.html', a_dev_token=port.a_dev_token)
@app.route('/history', methods=['GET'])
def history():
playlists = Playlist.query.order_by(Playlist.date_added).all()
return render_template('history.html', playlists=playlists)
if __name__ == "__main__":
app.run(debug=True)