diff --git a/open-leaderboard-server.py b/open-leaderboard-server.py index a412ab0..0011d4b 100755 --- a/open-leaderboard-server.py +++ b/open-leaderboard-server.py @@ -13,13 +13,42 @@ PARAM_END = "end" BASE_URL = "http://{server}{path}?{paramStart}={start}&{paramEnd}={end}" SEGMENT = 100 +SEPERATOR = ',' class Player: def __init__(self, line): - pass + '''Initialize a player object later to be serialized to HTML''' - def getLineHTML(self): - pass + # parse input line # + name, playerID, rating, games, wins = line.split(SEPERATOR) + + # set relevant values # + self.name = name + self.playerID = playerID + self.rating = int(float(rating)) + self.games = int(games) + self.wins = int(wins) + self.loses = self.games - self.wins + + # determine winratio # + if self.games == 0: + self.winratio = "N/A" + else: + self.winratio = str(int(self.wins/self.games * 100)) + + def getLineHTML(self, rank): + '''Build a single line for a specific player in the leaderboard''' + + string = flask.render_template("playerLine.html", \ + playerRank = rank, \ + playerName = self.name, \ + playerRating = self.rating, \ + playerGames = self.games, \ + playerWinratio = self.winratio) + + # mark returned string as preformated html # + return flask.Markup(string) + @app.route('/leaderboard') def leaderboard(): @@ -46,33 +75,26 @@ def leaderboard(): start=start, \ end=end) - response = str(requests.get(requestURL), "utf-8") + responseString = str(requests.get(requestURL).content, "utf-8") # create relevant html-lines from player - players = [Player(line) for line in response.split("\n")] - playersHTMLs = [p.getLineHTML() for p in players] + players = [Player(line) for line in responseString.split("\n")] # sanity check reponse # if len(players) > 100: raise ValueError("Bad reponse from rating server") - # template html # - leaderBoardColumnNames = "
{}
" - leaderBoardEvenLine = "
{}
" - leaderBoardOddLine = "
{}
" - columContent = "LOL" - leaderBoardContent = leaderBoardColumnNames.format(columContent) - for i in range(0, len(players)): - if i%2 == 0: - leaderBoardContent += leaderBoardEvenLine.format(players[i].getLineHTML()) - else: - leaderBoardContent += leaderBoardOdd.format(players[i].getLineHTML()) - - finalResponse = render_template("base.html", + finalResponse = flask.render_template("base.html", playerList=players, \ + columNames=columContent, \ + start=start) return finalResponse +@app.route('/static/') +def send_js(path): + return send_from_directory('static', path) + if __name__ == "__main__": parser = argparse.ArgumentParser(description='Start open-leaderboard') diff --git a/static/site.css b/static/site.css index 5f8a5db..faaf437 100644 --- a/static/site.css +++ b/static/site.css @@ -52,12 +52,48 @@ body{ } .line-even{ - width: 100%; + width: 100%; background-color: grey; + overflow: hidden; + padding-top: 2px; + padding-bottom: 2px; } .line-odd{ width: 100%; background-color: lightgrey; + overflow: hidden; + padding-top: 2px; + padding-bottom: 2px; +} + +/* ############# PLAYER INFORMATION IN LINES ############# */ +.playerRank{ + float: left; + width: 10%; +} + +.playerName{ + float: left; + width: 30%; +} + +.playerRating{ + float: right; + width: 20%; + text-align: right; + +} + +.playerGames{ + float: right; + width: 20%; + text-align: right; +} + +.playerWinratio{ + float: right; + width: 20%; + text-align: center; } /* ######################## FOOTER ####################### */ diff --git a/templates/base.html b/templates/base.html index f52453d..9b9b024 100644 --- a/templates/base.html +++ b/templates/base.html @@ -12,14 +12,13 @@
{{ columNames }}
- {% set count = 1 %} + {% set count = start+1 %} {% for player in playerList %} {% if count % 2 == 0 %} -
{{ player.getLineHTML() }}
+
{{ player.getLineHTML(count) }}
{% else %} -
{{ player.getLineHTML() }}
+
{{ player.getLineHTML(count) }}
{% endif %} - {% set count = count + 1 %} {% endfor %}
diff --git a/templates/playerLine.html b/templates/playerLine.html new file mode 100644 index 0000000..3705baa --- /dev/null +++ b/templates/playerLine.html @@ -0,0 +1,5 @@ +
{{ playerRank }}
+
{{ playerName }}
+
{{ playerWinratio }}
+
{{ playerRating }}
+
{{ playerGames }}