summaryrefslogtreecommitdiff
path: root/examples/dashboard/app.py
diff options
context:
space:
mode:
authorschneefux <schneefux+commit@schneefux.xyz>2017-01-15 15:16:39 +0100
committerschneefux <schneefux+commit@schneefux.xyz>2017-01-15 15:16:39 +0100
commit3d76eccf4e558f8d06583e30932afcaff91749cd (patch)
tree4ccb5a4289183a05e88570ae53d6f99d201b156f /examples/dashboard/app.py
parent7422d6f86dffb6f0bf7cb015e188bc62c0f1111e (diff)
downloadpython-gamelocker-3d76eccf4e558f8d06583e30932afcaff91749cd.tar.gz
python-gamelocker-3d76eccf4e558f8d06583e30932afcaff91749cd.zip
rework and redesign API demo
Diffstat (limited to 'examples/dashboard/app.py')
-rw-r--r--examples/dashboard/app.py97
1 files changed, 56 insertions, 41 deletions
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():
- api = gamelocker.Gamelocker("aaa.bbb.ccc").vainglory()
- number = 100
- matches = api.matches(number)
+ if "ads" not in session:
+ session["ads"] = True
+ return render_template("index.html", ads=ads.ads, useads=session["ads"])
- # 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})
+@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()
+ data["number"] = 50
+ matches = api.matches(data["number"])
- 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]})
+ if participant.player.name not in players:
+ players[participant.player.name] = 0
+ players[participant.player.name] += 1
- # --- hero stats
- if match.gameMode not in picks:
- picks[match.gameMode] = dict()
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)