summaryrefslogtreecommitdiff
path: root/jfr_playoff/data/tournament/jfrdb.py
diff options
context:
space:
mode:
authoremkael <emkael@tlen.pl>2019-12-30 12:49:54 +0100
committeremkael <emkael@tlen.pl>2019-12-30 12:49:54 +0100
commit7a598f65372b1b694d222946fd6269033bde0e54 (patch)
treee33fb74aad63756f0b3c94f12e29aff6c97064ed /jfr_playoff/data/tournament/jfrdb.py
parentf77bac9b5406c6bf6b1c819f155164568ef4af36 (diff)
New package structure for result info classes
Diffstat (limited to 'jfr_playoff/data/tournament/jfrdb.py')
-rw-r--r--jfr_playoff/data/tournament/jfrdb.py60
1 files changed, 60 insertions, 0 deletions
diff --git a/jfr_playoff/data/tournament/jfrdb.py b/jfr_playoff/data/tournament/jfrdb.py
new file mode 100644
index 0000000..48645df
--- /dev/null
+++ b/jfr_playoff/data/tournament/jfrdb.py
@@ -0,0 +1,60 @@
+import jfr_playoff.sql as p_sql
+
+from jfr_playoff.logger import PlayoffLogger
+from jfr_playoff.data.tournament import TournamentInfoClient
+
+SWISS_TIE_WARNING = 'tie detected in swiss %s.' + \
+ ' Make sure to resolve the tie by arranging teams' + \
+ ' in configuration file.'
+
+
+class JFRDbTournamentInfo(TournamentInfoClient):
+ def get_exceptions(self, method):
+ return (IOError, TypeError, IndexError, KeyError)
+
+ def get_results_link(self, suffix='leaderb.html'):
+ row = self.database.fetch(
+ self.settings['database'], p_sql.PREFIX, ())
+ if row is not None:
+ if len(row) > 0:
+ link = row[0] + suffix
+ PlayoffLogger.get('tournament.jfrdb').info(
+ 'generating tournament-specific link from DB %s prefix: %s -> %s',
+ self.settings['database'], suffix, link)
+ return link
+ raise ValueError('unable to fetch db link')
+
+ def is_finished(self):
+ finished = self.database.fetch(
+ self.settings['database'], p_sql.SWISS_ENDED, {})
+ PlayoffLogger.get('tournament.jfrdb').info(
+ 'fetching tournament finished status from DB %s: %s',
+ self.settings['database'], finished)
+ return (len(finished) > 0) and (finished[0] > 0)
+
+ def get_tournament_results(self):
+ if 'ties' not in self.settings:
+ self.settings['ties'] = []
+ swiss_teams = self.database.fetch_all(
+ self.settings['database'], p_sql.SWISS_RESULTS, {})
+ swiss_results = sorted(
+ swiss_teams,
+ key=lambda t: self.settings['ties'].index(t[0]) \
+ if t[0] in self.settings['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])
+ PlayoffLogger.get('tournament.jfrdb').info(
+ 'fetched tournament results from database %s: %s',
+ self.settings['database'], swiss_results)
+ prev_result = None
+ for team in swiss_results:
+ if prev_result == team[1]:
+ PlayoffLogger.get('tournament.jfrdb').warning(
+ SWISS_TIE_WARNING, self.settings['database'])
+ prev_result = team[1]
+ db_teams = [[team[0], team[3], team[4]] for team in swiss_results]
+ PlayoffLogger.get('tournament.jfrdb').info(
+ 'fetched team list from database %s: %s',
+ self.settings['database'], db_teams)
+ return db_teams