From 3d76eccf4e558f8d06583e30932afcaff91749cd Mon Sep 17 00:00:00 2001 From: schneefux Date: Sun, 15 Jan 2017 15:16:39 +0100 Subject: rework and redesign API demo --- examples/dashboard/app.py | 99 +++++++++++++++++++++++++++-------------------- 1 file changed, 57 insertions(+), 42 deletions(-) (limited to 'examples/dashboard/app.py') diff --git a/examples/dashboard/app.py b/examples/dashboard/app.py index ee9de66..8d798fa 100644 --- a/examples/dashboard/app.py +++ b/examples/dashboard/app.py @@ -1,64 +1,79 @@ #!/usr/bin/python # -*- coding: utf-8 -*- -from flask import Flask, render_template -import json +import itertools +from flask import Flask, render_template, session, redirect +from werkzeug.contrib.cache import SimpleCache import gamelocker +import ads +import config + app = Flask(__name__) +cache = SimpleCache() + @app.route("/") def index(): + if "ads" not in session: + session["ads"] = True + return render_template("index.html", ads=ads.ads, useads=session["ads"]) + +@app.route("/ads-toggle") +def adswitch(): + session["ads"] = not session["ads"] + return redirect("/") + +@app.route("/stats.js") +def data(): + data = cache.get("data") + if data is not None: + return render_template("stats.js", stats=data) + + data = dict() api = gamelocker.Gamelocker("aaa.bbb.ccc").vainglory() - number = 100 - matches = api.matches(number) + data["number"] = 50 + matches = api.matches(data["number"]) - # TODO this, is a mess. - gameModes = [] - for match in matches: - gmsuccess = False - for mode in gameModes: - if mode["name"] == match.gameMode: - mode["y"] += 1 - gmsuccess = True - break - if gmsuccess == False: - gameModes.append({"name": match.gameMode, "y": 1}) - - players = [] + gameModes = dict() + durations = dict() + players = dict() + heroes = dict() picks = dict() for match in matches: + if match.gameMode not in gameModes: + gameModes[match.gameMode] = 0 + durations[match.gameMode] = [] + picks[match.gameMode] = dict() + gameModes[match.gameMode] += 1 + durations[match.gameMode] += [match.duration/60] + for roster in match.rosters: for participant in roster.participants: - # --- player stats - plsuccess = False - for player in players: - if player["name"] == participant.player.name: - player["data"][0] += 1 - plsuccess = True - break - if plsuccess == False: - players.append({"name": participant.player.name, "data": [1]}) - - # --- hero stats - if match.gameMode not in picks: - picks[match.gameMode] = dict() + if participant.player.name not in players: + players[participant.player.name] = 0 + players[participant.player.name] += 1 + if participant.actor not in picks[match.gameMode]: picks[match.gameMode][participant.actor] = 0 picks[match.gameMode][participant.actor] += 1 - for p in picks: # flatten - heroes = list(picks[p].keys()) - picks[p] = list(picks[p].values()) - new_picks = [] - for k, v in picks.items(): - new_picks.append({"name": k, "data": v}) - picks = new_picks - - players = sorted(players, key=lambda k: k["data"][0]) - players = players[:5] + if participant.actor not in heroes: + heroes[participant.actor] = 0 + + data["gameModes"] = [{"name": k, "y": v} for k, v in gameModes.items()] + data["durations"] = [{"name": k, "data": list(zip([list(durations.keys()).index(k)]*len(v), v))} for k, v in durations.items()] + + data["picks"] = [{"name": k, "data": list(v.values())} for k, v in picks.items()] + data["heroes"] = list(heroes.keys()) + + players = sorted(players.items(), key=lambda x: x[1])[:5] + data["players"] = [{"name": k, "data": [v]} for k, v in players] + + cache.set("data", data, timeout=10*60) - return render_template("index.html", gameModeNum=number, gameModes=gameModes, players=players, picks=picks, heroes=heroes) + return render_template("stats.js", stats=data) if __name__ == "__main__": - app.run() + app.secret_key = config.secret_key + app.run(debug=config.debug) -- cgit v1.3.1