Merge branch 'master' of gitlab.com:Sheppy_/skillbird

This commit is contained in:
Yannik Schmidt
2019-06-04 22:57:27 +02:00
2 changed files with 93 additions and 32 deletions

View File

@@ -9,6 +9,13 @@ known_players = dict()
player_ranks = dict()
last_rank_update = datetime.now()
def _get_known_players():
return known_players
#############################################################
###################### Save/Load File #######################
#############################################################
def load_save():
with open("score.log") as f:
for l in f:
@@ -20,36 +27,9 @@ def save_to_file(fname="score.log"):
for p in known_players.values():
f.write(p.toCSV()+'\n')
def get_player_rank(p):
global player_ranks
try:
return str(player_ranks[p])
except KeyError:
return "N/A"
def dumpRatings(top=0, forceMeanSort=False, enforceWhitelist=None):
global known_players
ret = ""
updatePlayerRanks(force=True)
if forceMeanSort:
sort = sorted(known_players.values(),key=lambda x: x.rating.mu,reverse=True)
else:
sort = sorted(known_players.values(),key=lambda x: TS.get_env().expose(x.rating),reverse=True)
if enforceWhitelist:
sort = list(filter(lambda x: x.name in enforceWhitelist, sort))
tmp = ["{} {} mean: {} var: {} WinRatio: {}% ({} Games)".format(x.get_name().ljust(30),\
str(int(TS.get_env().expose(x.rating))).rjust(5),str(int(x.rating.mu)).rjust(4),\
str(int(x.rating.sigma)).rjust(4),x.winratio().rjust(4),str(x.games).rjust(3))\
for x in sort]
if top != 0:
tmp = tmp[:top]
count = 0
for s in tmp:
count += 1
ret += ("Rank: "+str(count).rjust(4) +" " + s + "\n")
return ret
#############################################################
###################### SyncPlayerDict #######################
#############################################################
def sync_from_database(players):
for p in players:
@@ -75,6 +55,9 @@ def sync_to_database(players, win):
known_players[p].lastUpdate = datetime.now()
updatePlayerRanks()
#############################################################
##################### Handle Rank Cache #####################
#############################################################
def updatePlayerRanks(force=False):
global last_rank_update
@@ -93,9 +76,10 @@ def updatePlayerRanks(force=False):
player_ranks.update({p:rank})
rank += 1
def _get_known_players():
return known_players
#############################################################
################## Write/Load External DB ###################
#############################################################
def save_event(event):
return
@@ -106,6 +90,10 @@ def save_psql():
f.close()
PSQL.save("insurgency", "insurgencyUser", "localhost", pw, known_players)
#############################################################
###################### Python API ###########################
#############################################################
def fuzzy_find_player(name):
ret = ""
tup_list = []
@@ -118,3 +106,41 @@ def fuzzy_find_player(name):
TS.unlock()
tmp = sorted(tup_list, key=lambda x: x[0], reverse=True)
return list(filter(lambda x: x[0] > 80, tmp))
def get_player_rank(p):
global player_ranks
try:
return str(player_ranks[p])
except KeyError:
return "N/A"
def dumpRatings(top=0, forceMeanSort=False, enforceWhitelist=None):
global known_players
ret = ""
updatePlayerRanks(force=True)
if forceMeanSort:
sort = sorted(known_players.values(), \
key=lambda x: x.rating.mu,reverse=True)
else:
sort = sorted(known_players.values(), \
key=lambda x: TS.get_env().expose(x.rating),reverse=True)
if enforceWhitelist:
sort = list(filter(lambda x: x.name in enforceWhitelist, sort))
tmp = ["{} {} mean: {} var: {} WinRatio: {}% ({} Games)".format( \
x.get_name().ljust(30), \
str(int(TS.get_env().expose(x.rating))).rjust(5), \
str(int(x.rating.mu)).rjust(4), \
str(int(x.rating.sigma)).rjust(4),x.winratio().rjust(4), \
str(x.games).rjust(3)) \
for x in sort]
if top != 0:
tmp = tmp[:top]
count = 0
for s in tmp:
count += 1
ret += ("Rank: "+str(count).rjust(4) +" " + s + "\n")
return ret

35
httpAPI.py Normal file
View File

@@ -0,0 +1,35 @@
#!/usr/bin/python3
import StorrageBackend as SB
import flask
app = flask.Flask("skillbird")
################## HTML HELPER ########################
def _invalidParameters():
return "500 - Invalid"
########################################################
@app.route('/getplayer')
def getPlayer():
pname = flask.request.args.get("name")
@app.route('/rankrange')
def getRankRange('/rankrange'):
try:
start = int(flask.request.args.get("start"))
end = int(flask.request.args.get("end"))
if end - start <= 0 or end - start > 100:
raise ValueError()
except ValueError:
return invalidParameters()
players = SB.getRankRange(start, end)
return "|".join([p.serialize() for p in players])
@app.route('/findplayer')
def getRankRange('/findplayer'):
string = flask.request.args.get("string")
players = SB.fuzzy_find_player(string)
return "|".join([p.serialize() for p in players])