refactor function updatePlayerRanks

This commit is contained in:
2019-10-26 17:07:49 +02:00
parent 29e0b4b450
commit e96c518216

View File

@@ -57,26 +57,36 @@ def sync_to_database(players, win):
############################################################# #############################################################
def updatePlayerRanks(force=False, minGames=10, maxInactivityDays=60): def updatePlayerRanks(force=False, minGames=10, maxInactivityDays=60):
'''Precalculate player ranks to be used for low performance impact'''
global last_rank_update global last_rank_update
global player_ranks global player_ranks
global playerRankList global playerRankList
if force or datetime.now() - last_rank_update > timedelta(seconds=240): if force or datetime.now() - last_rank_update > timedelta(seconds=240):
last_rank_update = datetime.now() last_rank_update = datetime.now()
s = sorted(known_players.values(), key=lambda x: TS.getEnviroment().expose(x.rating),reverse=True)
now = datetime.now() # sort players by rank #
s = list(filter(lambda p: now - p.lastUpdate < timedelta(days=maxInactivityDays) \ sortKey = key = lambda x: TS.getEnviroment().expose(x.rating)
and p.games >= minGames, s)) sortedPlayers = sorted(known_players.values(), key=sortKey, reverse=True)
rank = 1
for p in s: # filter out inactive and low-game players #
maxInactivityDelta = timedelta(days=maxInactivityDays)
filterKey = lambda p: (last_rank_update - p.lastUpdate) < maxInactivityDelta \
and p.games >= minGames
filteredPlayers = list(filter(filterKey, sortedPlayers))
# assing ranks to player objects #
rankCounter = 1
for p in filteredPlayers:
if p in player_ranks: if p in player_ranks:
player_ranks[p] = rank player_ranks[p] = rankCounter
else: else:
player_ranks.update({p:rank}) player_ranks.update({p:rankCounter})
rank += 1 rankCounter += 1
# list of players in the right order for a leaderboard # # list of players in the right order for a leaderboard #
playerRankList = list(s) playerRankList = list(filteredPlayers)
############################################################# #############################################################