From e1f1f59ecbdf749a215e631438efaf7ddc20c247 Mon Sep 17 00:00:00 2001 From: emkael Date: Fri, 6 Jul 2018 01:09:50 +0200 Subject: Storing information about seeding from starting positions in match info object --- jfr_playoff/matchinfo.py | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'jfr_playoff/matchinfo.py') diff --git a/jfr_playoff/matchinfo.py b/jfr_playoff/matchinfo.py index 93b997a..5a31577 100644 --- a/jfr_playoff/matchinfo.py +++ b/jfr_playoff/matchinfo.py @@ -187,6 +187,10 @@ class MatchInfo: 'fetching HTML scores for match #%d failed: %s(%s)', self.info.id, type(e).__name__, str(e)) self.info.teams = self.__get_config_teams(self.info.teams) + for team in range(0, len(self.info.teams)): + if 'place' in self.config['teams'][team]: + self.info.teams[team].place = self.config['teams'][team]['place'] + def __get_db_board_count(self): towels = self.database.fetch( -- cgit v1.2.3 From ac0733c36b6200aecb2c738a549d00d7c2e6be98 Mon Sep 17 00:00:00 2001 From: emkael Date: Fri, 6 Jul 2018 03:20:13 +0200 Subject: Storing finishing positions in DTO --- jfr_playoff/dto.py | 2 ++ jfr_playoff/matchinfo.py | 2 ++ 2 files changed, 4 insertions(+) (limited to 'jfr_playoff/matchinfo.py') diff --git a/jfr_playoff/dto.py b/jfr_playoff/dto.py index fa22265..1bc153c 100644 --- a/jfr_playoff/dto.py +++ b/jfr_playoff/dto.py @@ -31,6 +31,8 @@ class Match(object): loser = None winner_matches = None loser_matches = None + winner_place = None + loser_place = None def __repr__(self): return (u'#%d (%s) %s [%s]' % ( diff --git a/jfr_playoff/matchinfo.py b/jfr_playoff/matchinfo.py index 5a31577..a7c4064 100644 --- a/jfr_playoff/matchinfo.py +++ b/jfr_playoff/matchinfo.py @@ -32,6 +32,8 @@ class MatchInfo: self.info.loser_matches += self.config['teams'][i]['loser'] self.info.winner_matches = list(set(self.info.winner_matches)) self.info.loser_matches = list(set(self.info.loser_matches)) + self.info.winner_place = self.config['winner'] if 'winner' in self.config else [] + self.info.loser_place = self.config['loser'] if 'loser' in self.config else [] self.info.teams = [] def __fetch_match_link(self): -- cgit v1.2.3 From 17b67eec50d428383406d4309bc7506fd22015db Mon Sep 17 00:00:00 2001 From: emkael Date: Fri, 28 Sep 2018 17:45:52 +0200 Subject: Refactoring fetching default values for config dictionaries --- jfr_playoff/generator.py | 9 +++------ jfr_playoff/matchinfo.py | 8 ++++---- 2 files changed, 7 insertions(+), 10 deletions(-) (limited to 'jfr_playoff/matchinfo.py') diff --git a/jfr_playoff/generator.py b/jfr_playoff/generator.py index 19b8c1d..c2fba28 100644 --- a/jfr_playoff/generator.py +++ b/jfr_playoff/generator.py @@ -117,8 +117,7 @@ class PlayoffGenerator(object): ] if match.loser_matches is not None else [] place_loser_link = [] place_winner_link = [] - if 'starting_position_indicators' in self.page \ - and self.page['starting_position_indicators']: + if self.page.get('starting_position_indicators', None): for team in match.teams: if len(team.place) > 0: place_link = ['place-' + str(pl) for pl in team.place] @@ -193,8 +192,7 @@ class PlayoffGenerator(object): finishing_places = set() for phase in grid: grid_x = col_no * self.page['width'] + (col_no + 1) * self.page['margin'] \ - if 'starting_position_indicators' in self.page \ - and self.page['starting_position_indicators'] \ + if self.page.get('starting_position_indicators', None) \ else col_no * (self.page['width'] + self.page['margin']) grid_boxes += self.get_phase_header(phase, grid_x) match_height = canvas_size[1] / len(phase.matches) @@ -206,8 +204,7 @@ class PlayoffGenerator(object): PlayoffLogger.get('generator').info( 'calculated grid box (%d, %d) position: (%d, %d)', col_no, row_no, grid_x, grid_y) - if 'box_positioning' in self.canvas \ - and str(match) in self.canvas['box_positioning']: + if str(match) in self.canvas.get('box_positioning', {}): if isinstance(self.canvas['box_positioning'][str(match)], list): grid_x, grid_y = self.canvas['box_positioning'][str(match)][0:2] else: diff --git a/jfr_playoff/matchinfo.py b/jfr_playoff/matchinfo.py index 4089a76..3e4d913 100644 --- a/jfr_playoff/matchinfo.py +++ b/jfr_playoff/matchinfo.py @@ -32,8 +32,8 @@ class MatchInfo: self.info.loser_matches += self.config['teams'][i]['loser'] self.info.winner_matches = list(set(self.info.winner_matches)) self.info.loser_matches = list(set(self.info.loser_matches)) - self.info.winner_place = self.config['winner'] if 'winner' in self.config else [] - self.info.loser_place = self.config['loser'] if 'loser' in self.config else [] + self.info.winner_place = self.config.get('winner', []) + self.info.loser_place = self.config.get('loser', []) self.info.teams = [] def __fetch_match_link(self): @@ -215,8 +215,8 @@ class MatchInfo: self.info.id, type(e).__name__, str(e)) self.info.teams = self.__get_config_teams(self.info.teams) for team in range(0, len(self.info.teams)): - if 'place' in self.config['teams'][team]: - self.info.teams[team].place = self.config['teams'][team]['place'] + self.info.teams[team].place = self.config['teams'][team].get( + 'place', self.info.teams[team].place) def __get_db_board_count(self): -- cgit v1.2.3 From 6f147d1b37de5c12b77c51ca2f80031cbec6ae20 Mon Sep 17 00:00:00 2001 From: emkael Date: Mon, 1 Oct 2018 14:54:58 +0200 Subject: Refactoring team name list in matches as actual list --- jfr_playoff/dto.py | 5 ++++- jfr_playoff/generator.py | 12 ++++++------ jfr_playoff/matchinfo.py | 37 +++++++++++++++++++------------------ 3 files changed, 29 insertions(+), 25 deletions(-) (limited to 'jfr_playoff/matchinfo.py') diff --git a/jfr_playoff/dto.py b/jfr_playoff/dto.py index a88cd2b..ad70735 100644 --- a/jfr_playoff/dto.py +++ b/jfr_playoff/dto.py @@ -8,9 +8,12 @@ def coalesce(*arg): class Team(object): - name = '' + name = None score = 0.0 + def __init__(self): + self.name = [] + def __unicode__(self): return u'%s (%.1f)' % (coalesce(self.name, ''), self.score) diff --git a/jfr_playoff/generator.py b/jfr_playoff/generator.py index d358d86..a1b519e 100644 --- a/jfr_playoff/generator.py +++ b/jfr_playoff/generator.py @@ -55,23 +55,23 @@ class PlayoffGenerator(object): for team in match.teams: score_html = self.p_temp.get('MATCH_SCORE', team.score) team_label = ' / '.join([ - self.data.get_shortname(name) for name in - team.name.split('
')]) + self.data.get_shortname(name) for name in team.name]) + team_name = '
'.join(team.name) label_max_length = self.page.get('label_length_limit', 0) if label_max_length: team_label = team_label[:label_max_length] + (team_label[label_max_length:] and '(...)') team_html = self.p_temp.get( 'MATCH_TEAM_LINK', - match.link, team.name, team_label) \ + match.link, team_name, team_label) \ if match.link is not None \ else self.p_temp.get( 'MATCH_TEAM_NON_LINK', - team.name, team_label) + team_name, team_label) rows += self.p_temp.get( 'MATCH_TEAM_ROW', ' '.join([ - 'winner' if team.name == match.winner else '', - 'loser' if team.name == match.loser else '' + 'winner' if match.winner in team.name else '', + 'loser' if match.loser in team.name else '' ]).strip(), team_html, self.p_temp.get( diff --git a/jfr_playoff/matchinfo.py b/jfr_playoff/matchinfo.py index ab742d4..e9854c5 100644 --- a/jfr_playoff/matchinfo.py +++ b/jfr_playoff/matchinfo.py @@ -58,9 +58,9 @@ class MatchInfo: teams[i].score = self.config['score'][score] try: team_no = int(score) - teams[i].name = self.teams[team_no-1][0] + teams[i].name = [self.teams[team_no-1][0]] except ValueError: - teams[i].name = score + teams[i].name = [score] teams_fetched = True else: teams[i].score = score @@ -77,8 +77,8 @@ class MatchInfo: row = self.database.fetch( self.config['database'], p_sql.MATCH_RESULTS, (self.config['table'], self.config['round'])) - teams[0].name = row[0] - teams[1].name = row[1] + teams[0].name = [row[0]] + teams[1].name = [row[1]] if fetch_scores: teams[0].score = row[3] + row[5] teams[1].score = row[4] + row[6] @@ -147,7 +147,7 @@ class MatchInfo: if isinstance(text, unicode)][0].strip(u'\xa0') for link in row.select('a[onmouseover]')] for i in range(0, 2): - teams[i].name = team_names[i] + teams[i].name = [team_names[i]] teams[i].score = scores[i] PlayoffLogger.get('matchinfo').info( 'HTML scores for match #%d: %s', @@ -158,9 +158,9 @@ class MatchInfo: for i in range(0, 2): match_teams = [] if isinstance(self.config['teams'][i], basestring): - teams[i].name = self.config['teams'][i] + teams[i].name = [self.config['teams'][i]] elif isinstance(self.config['teams'][i], list): - teams[i].name = '
'.join(self.config['teams'][i]) + teams[i].name = self.config['teams'][i] else: if 'winner' in self.config['teams'][i]: match_teams += [ @@ -176,11 +176,10 @@ class MatchInfo: for place in self.config['teams'][i]['place']] known_teams = [team for team in match_teams if team is not None] if len(known_teams) > 0: - teams[i].name = '
'.join([ - team if team is not None - else '??' for team in match_teams]) + teams[i].name = [team if team is not None + else '??' for team in match_teams] else: - teams[i].name = '' + teams[i].name = [''] PlayoffLogger.get('matchinfo').info( 'config scores for match #%d: %s', self.info.id, teams) @@ -341,13 +340,15 @@ class MatchInfo: else boards_played def __determine_outcome(self): - if (self.info.running == -1): - if self.info.teams[0].score > self.info.teams[1].score: - self.info.winner = self.info.teams[0].name - self.info.loser = self.info.teams[1].name - else: - self.info.loser = self.info.teams[0].name - self.info.winner = self.info.teams[1].name + if (len(self.info.teams[0].name) == 1) \ + and (len(self.info.teams[1].name) == 1): + if self.info.running == -1: + if self.info.teams[0].score > self.info.teams[1].score: + self.info.winner = self.info.teams[0].name[0] + self.info.loser = self.info.teams[1].name[0] + else: + self.info.loser = self.info.teams[0].name[0] + self.info.winner = self.info.teams[1].name[0] def __get_db_running_link(self, prefix, round_no): current_segment = int( -- cgit v1.2.3 From 03ab8b041179daa2ed75966a3c2255e239f8fde7 Mon Sep 17 00:00:00 2001 From: emkael Date: Mon, 1 Oct 2018 16:09:07 +0200 Subject: Explicitly counting known teams for match boxes --- jfr_playoff/dto.py | 1 + jfr_playoff/generator.py | 11 +++++++---- jfr_playoff/matchinfo.py | 18 ++++++++---------- 3 files changed, 16 insertions(+), 14 deletions(-) (limited to 'jfr_playoff/matchinfo.py') diff --git a/jfr_playoff/dto.py b/jfr_playoff/dto.py index ad70735..58b08c1 100644 --- a/jfr_playoff/dto.py +++ b/jfr_playoff/dto.py @@ -10,6 +10,7 @@ def coalesce(*arg): class Team(object): name = None score = 0.0 + known_teams = 0 def __init__(self): self.name = [] diff --git a/jfr_playoff/generator.py b/jfr_playoff/generator.py index a1b519e..f2a2c55 100644 --- a/jfr_playoff/generator.py +++ b/jfr_playoff/generator.py @@ -1,5 +1,6 @@ from datetime import datetime +from jfr_playoff.dto import coalesce from jfr_playoff.template import PlayoffTemplate from jfr_playoff.data import PlayoffData from jfr_playoff.logger import PlayoffLogger @@ -54,9 +55,11 @@ class PlayoffGenerator(object): rows = '' for team in match.teams: score_html = self.p_temp.get('MATCH_SCORE', team.score) + teams = [coalesce(name, '??') for name in team.name] team_label = ' / '.join([ - self.data.get_shortname(name) for name in team.name]) - team_name = '
'.join(team.name) + self.data.get_shortname(name) if name is not None else '??' for name in team.name]) \ + if team.known_teams > 0 else '' + team_name = '
'.join(teams) label_max_length = self.page.get('label_length_limit', 0) if label_max_length: team_label = team_label[:label_max_length] + (team_label[label_max_length:] and '(...)') @@ -70,8 +73,8 @@ class PlayoffGenerator(object): rows += self.p_temp.get( 'MATCH_TEAM_ROW', ' '.join([ - 'winner' if match.winner in team.name else '', - 'loser' if match.loser in team.name else '' + 'winner' if match.winner in teams else '', + 'loser' if match.loser in teams else '' ]).strip(), team_html, self.p_temp.get( diff --git a/jfr_playoff/matchinfo.py b/jfr_playoff/matchinfo.py index e9854c5..f7a156d 100644 --- a/jfr_playoff/matchinfo.py +++ b/jfr_playoff/matchinfo.py @@ -77,8 +77,9 @@ class MatchInfo: row = self.database.fetch( self.config['database'], p_sql.MATCH_RESULTS, (self.config['table'], self.config['round'])) - teams[0].name = [row[0]] - teams[1].name = [row[1]] + for i in range(0, 2): + teams[i].name = [row[i]] + teams[i].known_teams = 1 if fetch_scores: teams[0].score = row[3] + row[5] teams[1].score = row[4] + row[6] @@ -148,6 +149,7 @@ class MatchInfo: for link in row.select('a[onmouseover]')] for i in range(0, 2): teams[i].name = [team_names[i]] + teams[i].known_teams = 1 teams[i].score = scores[i] PlayoffLogger.get('matchinfo').info( 'HTML scores for match #%d: %s', @@ -174,12 +176,8 @@ class MatchInfo: match_teams += [ self.teams[place-1][0] for place in self.config['teams'][i]['place']] - known_teams = [team for team in match_teams if team is not None] - if len(known_teams) > 0: - teams[i].name = [team if team is not None - else '??' for team in match_teams] - else: - teams[i].name = [''] + teams[i].name = match_teams + teams[i].known_teams = len([team for team in match_teams if team is not None]) PlayoffLogger.get('matchinfo').info( 'config scores for match #%d: %s', self.info.id, teams) @@ -340,8 +338,8 @@ class MatchInfo: else boards_played def __determine_outcome(self): - if (len(self.info.teams[0].name) == 1) \ - and (len(self.info.teams[1].name) == 1): + if (self.info.teams[0].known_teams == 1) \ + and (self.info.teams[1].known_teams == 1): if self.info.running == -1: if self.info.teams[0].score > self.info.teams[1].score: self.info.winner = self.info.teams[0].name[0] -- cgit v1.2.3 From 62fe5244beb1a859b86aae86d784a86b30d86ca9 Mon Sep 17 00:00:00 2001 From: emkael Date: Tue, 2 Oct 2018 12:41:31 +0200 Subject: Fetching info about possible outcomes of matches in progress --- jfr_playoff/dto.py | 4 ++++ jfr_playoff/matchinfo.py | 15 +++++++++++++++ 2 files changed, 19 insertions(+) (limited to 'jfr_playoff/matchinfo.py') diff --git a/jfr_playoff/dto.py b/jfr_playoff/dto.py index 58b08c1..b1a3a5c 100644 --- a/jfr_playoff/dto.py +++ b/jfr_playoff/dto.py @@ -9,11 +9,13 @@ def coalesce(*arg): class Team(object): name = None + possible_name = None score = 0.0 known_teams = 0 def __init__(self): self.name = [] + self.possible_name = [] def __unicode__(self): return u'%s (%.1f)' % (coalesce(self.name, ''), self.score) @@ -29,6 +31,8 @@ class Match(object): link = None winner = None loser = None + possible_winner = None + possible_loser = None winner_matches = None loser_matches = None diff --git a/jfr_playoff/matchinfo.py b/jfr_playoff/matchinfo.py index f7a156d..bb13ed9 100644 --- a/jfr_playoff/matchinfo.py +++ b/jfr_playoff/matchinfo.py @@ -159,6 +159,7 @@ class MatchInfo: def __get_config_teams(self, teams): for i in range(0, 2): match_teams = [] + possible_teams = [] if isinstance(self.config['teams'][i], basestring): teams[i].name = [self.config['teams'][i]] elif isinstance(self.config['teams'][i], list): @@ -168,15 +169,22 @@ class MatchInfo: match_teams += [ MatchInfo.matches[winner_match].winner for winner_match in self.config['teams'][i]['winner']] + possible_teams += [ + MatchInfo.matches[winner_match].possible_winner + for winner_match in self.config['teams'][i]['winner']] if 'loser' in self.config['teams'][i]: match_teams += [ MatchInfo.matches[loser_match].loser for loser_match in self.config['teams'][i]['loser']] + possible_teams += [ + MatchInfo.matches[loser_match].possible_loser + for loser_match in self.config['teams'][i]['loser']] if 'place' in self.config['teams'][i]: match_teams += [ self.teams[place-1][0] for place in self.config['teams'][i]['place']] teams[i].name = match_teams + teams[i].possible_name = possible_teams teams[i].known_teams = len([team for team in match_teams if team is not None]) PlayoffLogger.get('matchinfo').info( 'config scores for match #%d: %s', @@ -347,6 +355,13 @@ class MatchInfo: else: self.info.loser = self.info.teams[0].name[0] self.info.winner = self.info.teams[1].name[0] + elif self.info.running > 0: + if self.info.teams[0].score > self.info.teams[1].score: + self.info.possible_winner = self.info.teams[0].name[0] + self.info.possible_loser = self.info.teams[1].name[0] + elif self.info.teams[0].score < self.info.teams[1].score: + self.info.possible_loser = self.info.teams[0].name[0] + self.info.possible_winner = self.info.teams[1].name[0] def __get_db_running_link(self, prefix, round_no): current_segment = int( -- cgit v1.2.3