mirror of
https://github.com/FAUSheppy/skillbird
synced 2025-12-06 23:01:36 +01:00
Merge branch 'master' of gitlab.com:Sheppy_/skillbird
This commit is contained in:
@@ -9,6 +9,13 @@ known_players = dict()
|
|||||||
player_ranks = dict()
|
player_ranks = dict()
|
||||||
last_rank_update = datetime.now()
|
last_rank_update = datetime.now()
|
||||||
|
|
||||||
|
def _get_known_players():
|
||||||
|
return known_players
|
||||||
|
|
||||||
|
#############################################################
|
||||||
|
###################### Save/Load File #######################
|
||||||
|
#############################################################
|
||||||
|
|
||||||
def load_save():
|
def load_save():
|
||||||
with open("score.log") as f:
|
with open("score.log") as f:
|
||||||
for l in f:
|
for l in f:
|
||||||
@@ -20,36 +27,9 @@ def save_to_file(fname="score.log"):
|
|||||||
for p in known_players.values():
|
for p in known_players.values():
|
||||||
f.write(p.toCSV()+'\n')
|
f.write(p.toCSV()+'\n')
|
||||||
|
|
||||||
def get_player_rank(p):
|
#############################################################
|
||||||
global player_ranks
|
###################### SyncPlayerDict #######################
|
||||||
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
|
|
||||||
|
|
||||||
def sync_from_database(players):
|
def sync_from_database(players):
|
||||||
for p in players:
|
for p in players:
|
||||||
@@ -75,6 +55,9 @@ def sync_to_database(players, win):
|
|||||||
known_players[p].lastUpdate = datetime.now()
|
known_players[p].lastUpdate = datetime.now()
|
||||||
updatePlayerRanks()
|
updatePlayerRanks()
|
||||||
|
|
||||||
|
#############################################################
|
||||||
|
##################### Handle Rank Cache #####################
|
||||||
|
#############################################################
|
||||||
|
|
||||||
def updatePlayerRanks(force=False):
|
def updatePlayerRanks(force=False):
|
||||||
global last_rank_update
|
global last_rank_update
|
||||||
@@ -93,9 +76,10 @@ def updatePlayerRanks(force=False):
|
|||||||
player_ranks.update({p:rank})
|
player_ranks.update({p:rank})
|
||||||
rank += 1
|
rank += 1
|
||||||
|
|
||||||
def _get_known_players():
|
|
||||||
return known_players
|
|
||||||
|
|
||||||
|
#############################################################
|
||||||
|
################## Write/Load External DB ###################
|
||||||
|
#############################################################
|
||||||
|
|
||||||
def save_event(event):
|
def save_event(event):
|
||||||
return
|
return
|
||||||
@@ -106,6 +90,10 @@ def save_psql():
|
|||||||
f.close()
|
f.close()
|
||||||
PSQL.save("insurgency", "insurgencyUser", "localhost", pw, known_players)
|
PSQL.save("insurgency", "insurgencyUser", "localhost", pw, known_players)
|
||||||
|
|
||||||
|
#############################################################
|
||||||
|
###################### Python API ###########################
|
||||||
|
#############################################################
|
||||||
|
|
||||||
def fuzzy_find_player(name):
|
def fuzzy_find_player(name):
|
||||||
ret = ""
|
ret = ""
|
||||||
tup_list = []
|
tup_list = []
|
||||||
@@ -118,3 +106,41 @@ def fuzzy_find_player(name):
|
|||||||
TS.unlock()
|
TS.unlock()
|
||||||
tmp = sorted(tup_list, key=lambda x: x[0], reverse=True)
|
tmp = sorted(tup_list, key=lambda x: x[0], reverse=True)
|
||||||
return list(filter(lambda x: x[0] > 80, tmp))
|
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
35
httpAPI.py
Normal 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])
|
||||||
Reference in New Issue
Block a user