from datetime import date, timedelta from flask import render_template from flask import request from application import app from application import config from application import util from model import get_spotify_data @app.route('/') @app.route('/charts/') def charts_general(): """ GET params: start: YYYYMMDD end: YYYYMMDD genreid: country: US/GB """ start = request.args.get('start') end = request.args.get('end') if start is None: sunday = util.get_sunday() else: sunday = date(int(start[0:4]), int(start[4:6]), int(start[6:8])) saturday = sunday + timedelta(days=6) # if current day, go back a week to get some past chart if saturday > date.today(): sunday -= timedelta(weeks=1) saturday -= timedelta(weeks=1) start = sunday.strftime('%Y%m%d') end = saturday.strftime('%Y%m%d') genre = request.args.get('genre', '') country = request.args.get('country', '') # in case of empty GET args if genre.strip() == '': genre = 'All' if country.strip() == '': country = 'US' prev_dates = { 'start': sunday - timedelta(weeks=1), 'end': saturday - timedelta(weeks=1) } next_dates = { 'start': sunday + timedelta(weeks=1), 'end': saturday + timedelta(weeks=1) } tracks = get_spotify_data.get_content(start, end, country, genre.lower()) tracks_old = get_spotify_data.get_content( prev_dates['start'].strftime('%Y%m%d'), prev_dates['end'].strftime('%Y%m%d'), country, genre.lower(), hydrate=False) ranks = {} for i, track in enumerate(tracks_old): ranks[track['track_uri']] = i for new_rank, track in enumerate(tracks): uri = track['track_uri'] old_rank = ranks.get(uri, None) if old_rank == None: track['movement'] = 'new' elif old_rank < new_rank: track['movement'] = 'down' elif old_rank > new_rank: track['movement'] = 'up' elif old_rank == new_rank: track['movement'] = 'same' return render_template('index.html', tracks=tracks, sunday=sunday, prev_dates=prev_dates, next_dates=next_dates, currentCountry=country, currentGenre=genre)