From 7a598f65372b1b694d222946fd6269033bde0e54 Mon Sep 17 00:00:00 2001 From: emkael Date: Mon, 30 Dec 2019 12:49:54 +0100 Subject: New package structure for result info classes --- jfr_playoff/data/tournament/tcjson.py | 62 +++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 jfr_playoff/data/tournament/tcjson.py (limited to 'jfr_playoff/data/tournament/tcjson.py') diff --git a/jfr_playoff/data/tournament/tcjson.py b/jfr_playoff/data/tournament/tcjson.py new file mode 100644 index 0000000..5e375ed --- /dev/null +++ b/jfr_playoff/data/tournament/tcjson.py @@ -0,0 +1,62 @@ +import json +import urlparse + +from jfr_playoff.logger import PlayoffLogger +from jfr_playoff.remote import RemoteUrl as p_remote +from jfr_playoff.data.tournament import TournamentInfoClient + +FLAG_CDN_URL = 'https://cdn.tournamentcalculator.com/flags/' + + +class TCJsonTournamentInfo(TournamentInfoClient): + def get_exceptions(self, method): + return (TypeError, IndexError, KeyError, IOError, ValueError) + + def get_results_link(self, suffix): + link = urlparse.urljoin(self.settings['link'], suffix) + PlayoffLogger.get('tournament.tcjson').info( + 'generating tournament-specific link from leaderboard link %s: %s -> %s', + self.settings['link'], suffix, link) + return link + + def is_finished(self): + settings_json = json.loads( + p_remote.fetch_raw(self.get_results_link('settings.json'))) + live_results = settings_json['LiveResults'] + last_round = settings_json['LastPlayedRound'] + last_session = settings_json['LastPlayedSession'] + finished = (not live_results) \ + and (last_round > 0) and (last_session > 0) + PlayoffLogger.get('tournament.tcjson').info( + 'tournament settings (live = %s, last_round = %d, last_session = %d) indicate finished: %s', + live_results, last_round, last_session, finished) + return finished + + def get_tournament_results(self): + results = [] + results_json = json.loads( + p_remote.fetch_raw(self.get_results_link('results.json'))) + participant_groups = [] + for result in results_json['Results']: + group = result['ParticipantGroup'] + if group is not None: + if group not in participant_groups: + participant_groups.append(group) + group_id = participant_groups.index(group) + 1 + else: + group_id = 999999 + participant = result['Participant'] + flag_url = None + flag = participant['_flag'] + if flag is not None: + flag_url = self.get_results_link( + flag['CustomFlagPath'] + if flag['IsCustom'] + else '%s/%s.png' % (FLAG_CDN_URL, flag['CountryNameCode'])) + results.append(( + group_id, result['Place'], + participant['_name'], participant['_shortName'], + flag_url)) + PlayoffLogger.get('tournament.tcjson').info( + 'tournament results fetched: %s' % results) + return [list(r[2:]) + [None] for r in sorted(results)] -- cgit v1.2.3