diff options
author | emkael <emkael@tlen.pl> | 2018-01-22 14:43:02 +0100 |
---|---|---|
committer | emkael <emkael@tlen.pl> | 2018-01-22 14:43:02 +0100 |
commit | b2a504ceec511d601a0be10af08c5e98fbbfc481 (patch) | |
tree | 7e07daa0ba29a596c76d0479aa16a6a779b7b05a /jfr_playoff/data.py | |
parent | 2947c609534ac652380d020df5d9a3023f222b60 (diff) |
Swiss results retrieval factored out
Diffstat (limited to 'jfr_playoff/data.py')
-rw-r--r-- | jfr_playoff/data.py | 36 |
1 files changed, 22 insertions, 14 deletions
diff --git a/jfr_playoff/data.py b/jfr_playoff/data.py index 435b4b6..2c35191 100644 --- a/jfr_playoff/data.py +++ b/jfr_playoff/data.py @@ -183,13 +183,6 @@ class PlayoffData(object): swiss_finished = self.database.fetch( event['database'], p_sql.SWISS_ENDED, {}) if swiss_finished[0] > 0: - swiss_teams = self.database.fetch_all( - event['database'], p_sql.SWISS_RESULTS, {}) - swiss_results = [(teams.index(team[0]), team[1], team[2]) for - team in swiss_teams] - swiss_results = sorted(swiss_results, key=lambda t: t[0]) - swiss_results = sorted( - swiss_results, key=lambda t: t[1], reverse=True) swiss_position = ( event['swiss_position'] if 'swiss_position' in event @@ -200,22 +193,37 @@ class PlayoffData(object): if 'position_to' in event else 9999 ) - prev_result = None place = 1 - for team in sorted( - swiss_results, key=lambda team: team[2]): - if prev_result == team[1]: - print SWISS_TIE_WARNING % (event['database']) - prev_result = team[1] + swiss_results = self.get_swiss_results( + event['database'], teams) + for team in swiss_results: if place >= swiss_position: target_position = event['position'] \ + place - swiss_position if target_position <= min( position_limit, len(self.leaderboard)): self.leaderboard[ - target_position - 1] = teams[team[0]] + target_position - 1] = team[0] place += 1 + def get_swiss_results(self, swiss, ties=None): + if ties is None: + ties = [] + swiss_teams = self.database.fetch_all( + swiss, p_sql.SWISS_RESULTS, {}) + swiss_results = sorted( + swiss_teams, + key=lambda t: ties.index(t[0]) if t[0] in ties else -1) + swiss_results = sorted( + swiss_results, key=lambda t: t[1], reverse=True) + swiss_results = sorted(swiss_results, key=lambda team: team[2]) + prev_result = None + for team in swiss_results: + if prev_result == team[1]: + print SWISS_TIE_WARNING % (swiss) + prev_result = team[1] + return [[team[0], team[3], team[4]] for team in swiss_results] + def fill_leaderboard(self): self.prefill_leaderboard(self.teams) leaderboard_teams = {} |