diff --git a/.gitignore b/.gitignore index f5b3cd0..ab03117 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ __pychache__/ *.pyc build/ configparse_wrapper/ +static/bootstrap/ diff --git a/database.py b/database.py index 638d68c..09b48ce 100644 --- a/database.py +++ b/database.py @@ -59,15 +59,15 @@ class DatabaseConnection: '''Get a player by his id''' cursor = self.connPlayers.cursor() - cursor.execute("SELECT * FROM players where playerId = ?", (playerId,)) + cursor.execute("SELECT * FROM players where id = ?", (playerId,)) row = cursor.fetchone() if(row): - playerInLeaderboard = player.PlayerInLeaderboard(playerRow) + playerInLeaderboard = player.PlayerInLeaderboard(row) else: playerInLeaderboard = None - return row + return playerInLeaderboard def getRankRange(self, start, end): '''Get a range of players by rank''' @@ -106,8 +106,8 @@ class DatabaseConnection: '''Calculate player rank - a player rank may change rapidly and can't and shouldn't be used to identify a player''' - cursor = connPlayers.cursor() + cursor = self.connPlayers.cursor() cursor.execute("SELECT COUNT(*) from players where (mu-2*sigma) > (?-2*?);", - (playerInLeaderboard.mu, playerInLeaderboard.sigma)) + (player.mu, player.sigma)) rank = cursor.fetchone()[0] return rank diff --git a/server.py b/server.py index 07cce52..7244921 100755 --- a/server.py +++ b/server.py @@ -2,6 +2,7 @@ import flask import requests import argparse +import datetime import flask_caching as fcache import json import os @@ -19,26 +20,58 @@ cache.init_app(app) SEGMENT=100 -@app.route('/playerdata') -def playerInfo(): - '''API-Endpoint for Canvas Query''' - playerId = flask.request.args.get("id") - db = DatabaseConnection(app.config["DB_PATH"]) - data = db.getHistoricalForPlayerId(playerId) - - return json.dumps(data) +def prettifyMinMaxY(computedMin, computedMax): + if computedMax > 0 and computedMin > 0: + return (0, 4000) + else: + return (computedMin - 100, 4000) @app.route("/player") def player(): '''Show Info about Player''' + playerId = flask.request.args.get("id") + if(not playerId): + return ("", 404) + db = DatabaseConnection(app.config["DB_PATH"]) player = db.getPlayerById(playerId) - player.rank = db.getPlayerRank(player) - return flask.render_template("player.html", player=player) + if(not player): + return ("", 404) + + player.rank = db.getPlayerRank(player) + histData = db.getHistoricalForPlayerId(playerId) + + csv_month_year = [] + csv_ratings = [] + + minRating = 3000 + maxRating = 0 + + if histData: + datapoints = histData[playerId] + if datapoints: + for dpk in datapoints.keys(): + + ratingString = str(int(datapoints[dpk]["mu"]) - 2*int(datapoints[dpk]["sigma"])) + ratingAmored = '"' + ratingString + '"' + csv_ratings += [ratingAmored] + t = datetime.datetime.fromtimestamp(int(float(dpk))) + tString = t.strftime("%m %Y") + tStringAmored = '"' + tString + '"' + csv_month_year += [tStringAmored] + + minRating = min(minRating, int(ratingString)) + maxRating = max(maxRating, int(ratingString)) + + yMin, yMax = prettifyMinMaxY(minRating, maxRating) + + return flask.render_template("player.html", player=player, CSV_RATINGS=",".join(csv_ratings), + CSV_MONTH_YEAR_OF_RATINGS=",".join(csv_month_year), + Y_MIN=yMin, Y_MAX=yMax) @app.route('/leaderboard') @app.route('/') diff --git a/templates/footer.html b/templates/footer.html new file mode 100644 index 0000000..abdc9f4 --- /dev/null +++ b/templates/footer.html @@ -0,0 +1,6 @@ +
diff --git a/templates/player.html b/templates/player.html new file mode 100644 index 0000000..67434d3 --- /dev/null +++ b/templates/player.html @@ -0,0 +1,75 @@ + + + +