From 6971fa553b1232b8faa61cb9545ac0ead78782f6 Mon Sep 17 00:00:00 2001 From: emkael Date: Sat, 24 Feb 2018 00:54:16 +0100 Subject: Lots of lots of messages are being logged --- jfr_playoff/generator.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'jfr_playoff/generator.py') diff --git a/jfr_playoff/generator.py b/jfr_playoff/generator.py index 06234fb..4596fed 100644 --- a/jfr_playoff/generator.py +++ b/jfr_playoff/generator.py @@ -2,15 +2,20 @@ from datetime import datetime import jfr_playoff.template as p_temp from jfr_playoff.data import PlayoffData +from jfr_playoff.logger import PlayoffLogger class PlayoffGenerator(object): def __init__(self, settings): self.data = PlayoffData(settings) self.page = settings.get('page') + PlayoffLogger.get('generator').info( + 'page settings: %s', self.page) self.canvas = {} if settings.has_section('canvas'): self.canvas = settings.get('canvas') + PlayoffLogger.get('generator').info( + 'canvas settings: %s', self.canvas) def generate_content(self): return p_temp.PAGE % ( @@ -55,6 +60,8 @@ class PlayoffGenerator(object): if match.running > 0: running_html = p_temp.MATCH_RUNNING % (match.running) html += p_temp.MATCH_LINK % (match.link, running_html) if match.link is not None else running_html + PlayoffLogger.get('generator').info( + 'match table for #%d generated: %d bytes', match.id, len(html)) return html def get_phase_header(self, phase, position): @@ -95,6 +102,8 @@ class PlayoffGenerator(object): dimensions[1] * ( self.page['height'] + self.page['margin'] ) - self.page['margin']) + PlayoffLogger.get('generator').info( + 'canvas size: %s', canvas_size) grid_boxes = '' col_no = 0 for phase in grid: @@ -105,6 +114,9 @@ class PlayoffGenerator(object): for match in phase.matches: grid_y = int(row_no * match_height + 0.5 * (match_height - self.page['height'])) + PlayoffLogger.get('generator').info( + 'grid box (%d, %d) position: (%d, %d)', + col_no, row_no, grid_x, grid_y) grid_boxes += self.get_match_box( matches[match] if match is not None else None, (grid_x, grid_y)) @@ -130,6 +142,8 @@ class PlayoffGenerator(object): position, self.get_flag(team), team or '') position += 1 html = p_temp.LEADERBOARD.decode('utf8') % (rows) + PlayoffLogger.get('generator').info( + 'leaderboard HTML generated: %d bytes', len(html)) return html def get_swiss_links(self): @@ -141,7 +155,10 @@ class PlayoffGenerator(object): info.append((p_temp.SWISS_LINK if event['finished'] else p_temp.SWISS_RUNNING_LINK) % ( event['link'], event_label )) - return '\n'.join(info) + html = '\n'.join(info) + PlayoffLogger.get('generator').info( + 'swiss HTML generated: %d bytes', len(html)) + return html def get_flag(self, team): flag = self.data.get_team_image(team) -- cgit v1.2.3 From 28218c054785e3cb77b6e36182bce97c8010319e Mon Sep 17 00:00:00 2001 From: emkael Date: Tue, 1 May 2018 11:53:23 +0200 Subject: Refactoring template "engine" to provide a uniform interface --- jfr_playoff/generator.py | 90 +++++++----- jfr_playoff/template.py | 364 ++++++++++++++++++++++++----------------------- 2 files changed, 241 insertions(+), 213 deletions(-) (limited to 'jfr_playoff/generator.py') diff --git a/jfr_playoff/generator.py b/jfr_playoff/generator.py index 2b5aaf0..e5d29a8 100644 --- a/jfr_playoff/generator.py +++ b/jfr_playoff/generator.py @@ -1,6 +1,6 @@ from datetime import datetime -import jfr_playoff.template as p_temp +from jfr_playoff.template import Template as p_temp from jfr_playoff.data import PlayoffData @@ -21,67 +21,82 @@ class PlayoffGenerator(object): self.data.generate_phases(), self.data.fill_match_info()) leaderboard_table = self.get_leaderboard_table() - return p_temp.PAGE % ( - p_temp.PAGE_HEAD % ( - p_temp.PAGE_HEAD_REFRESH % ( - self.page['refresh']) + return p_temp.get( + 'PAGE', + p_temp.get( + 'PAGE_HEAD', + p_temp.get( + 'PAGE_HEAD_REFRESH', + self.page['refresh']) \ if self.page['refresh'] > 0 else '', self.page['title']), - p_temp.PAGE_BODY % ( + p_temp.get( + 'PAGE_BODY', self.page['logoh'], match_grid, self.get_swiss_links(), leaderboard_table, self.get_leaderboard_caption_table() if leaderboard_table else '', - p_temp.PAGE_BODY_FOOTER.decode('utf8') % ( + p_temp.get( + 'PAGE_BODY_FOOTER', datetime.now().strftime('%Y-%m-%d o %H:%M:%S')))) def get_match_table(self, match): rows = '' for team in match.teams: - score_html = p_temp.MATCH_SCORE % (team.score) + score_html = p_temp.get('MATCH_SCORE', team.score) team_label = ' / '.join([ self.data.get_shortname(name) for name in team.name.split('
')]) - team_html = p_temp.MATCH_TEAM_LINK % ( - match.link, team.name, team_label) if match.link is not None \ - else p_temp.MATCH_TEAM_NON_LINK % ( - team.name, team_label) - rows += p_temp.MATCH_TEAM_ROW % ( + team_html = p_temp.get( + 'MATCH_TEAM_LINK', + match.link, team.name, team_label) \ + if match.link is not None \ + else p_temp.get( + 'MATCH_TEAM_NON_LINK', + team.name, team_label) + rows += p_temp.get( + 'MATCH_TEAM_ROW', ' '.join([ 'winner' if team.name == match.winner else '', 'loser' if team.name == match.loser else '' ]).strip(), team_html, - p_temp.MATCH_LINK % (match.link, score_html) if match.link is not None else score_html) - html = p_temp.MATCH_TABLE.decode('utf8') % ( + p_temp.get( + 'MATCH_LINK', + match.link, score_html) \ + if match.link is not None else score_html) + html = p_temp.get( + 'MATCH_TABLE', int(self.page['width'] * 0.75), int(self.page['width'] * 0.25), rows) if match.running > 0: - running_html = p_temp.MATCH_RUNNING % (match.running) - html += p_temp.MATCH_LINK % (match.link, running_html) if match.link is not None else running_html + running_html = p_temp.get('MATCH_RUNNING', match.running) + html += p_temp.get('MATCH_LINK', match.link, running_html) if match.link is not None else running_html return html def get_phase_header(self, phase, position): - if phase.running: - grid_header = p_temp.MATCH_GRID_PHASE_RUNNING - else: - grid_header = p_temp.MATCH_GRID_PHASE - grid_header = grid_header % (phase.title) + grid_header = p_temp.get( + 'MATCH_GRID_PHASE_RUNNING' if phase.running \ + else 'MATCH_GRID_PHASE', + phase.title) if phase.link is not None: - return p_temp.MATCH_GRID_PHASE_LINK % ( + return p_temp.get( + 'MATCH_GRID_PHASE_LINK', phase.link, self.page['width'], position, grid_header) else: - return p_temp.MATCH_GRID_PHASE_NON_LINK % ( + return p_temp.get( + 'MATCH_GRID_PHASE_NON_LINK', self.page['width'], position, grid_header) def get_match_box(self, match, position): if match is not None: - return p_temp.MATCH_BOX % ( + return p_temp.get( + 'MATCH_BOX', position[0], position[1], match.id, ' '.join([ @@ -116,7 +131,8 @@ class PlayoffGenerator(object): (grid_x, grid_y)) row_no += 1 col_no += 1 - return p_temp.MATCH_GRID % ( + return p_temp.get( + 'MATCH_GRID', canvas_size[0], canvas_size[1], canvas_size[0], canvas_size[1], ' '.join(['data-%s="%s"' % ( @@ -136,9 +152,10 @@ class PlayoffGenerator(object): rows = '' for style in self.leaderboard_classes: if 'caption' in style: - rows += p_temp.LEADERBOARD_CAPTION_TABLE_ROW % ( + rows += p_temp.get( + 'LEADERBOARD_CAPTION_TABLE_ROW', style['class'], style['caption']) - return p_temp.LEADERBOARD_CAPTION_TABLE % (rows) if rows else '' + return p_temp.get('LEADERBOARD_CAPTION_TABLE', rows) if rows else '' def get_leaderboard_table(self): leaderboard = self.data.fill_leaderboard() @@ -147,24 +164,27 @@ class PlayoffGenerator(object): position = 1 rows = '' for team in leaderboard: - rows += p_temp.LEADERBOARD_ROW % ( + rows += p_temp.get( + 'LEADERBOARD_ROW', self.get_leaderboard_row_class(position), position, self.get_flag(team), team or '') position += 1 - html = p_temp.LEADERBOARD.decode('utf8') % (rows) + html = p_temp.get('LEADERBOARD', rows) return html def get_swiss_links(self): info = [] for event in self.data.get_swiss_info(): - event_label = p_temp.SWISS_DEFAULT_LABEL % (event['position']) + event_label = p_temp.get('SWISS_DEFAULT_LABEL', event['position']) if 'label' in event and event['label'] is not None: event_label = event['label'] - info.append((p_temp.SWISS_LINK if event['finished'] else p_temp.SWISS_RUNNING_LINK) % ( - event['link'], event_label - )) + info.append((p_temp.get('SWISS_LINK') \ + if event['finished'] \ + else p_temp.get( + 'SWISS_RUNNING_LINK', + event['link'], event_label))) return '\n'.join(info) def get_flag(self, team): flag = self.data.get_team_image(team) - return '' if flag is None else p_temp.LEADERBOARD_ROW_FLAG % (flag) + return '' if flag is None else p_temp.get('LEADERBOARD_ROW_FLAG', flag) diff --git a/jfr_playoff/template.py b/jfr_playoff/template.py index b99c7c7..0699c1e 100644 --- a/jfr_playoff/template.py +++ b/jfr_playoff/template.py @@ -1,180 +1,188 @@ # -*- coding: utf-8 -*- -MATCH_TABLE = ''' - - - - - -%s -
  wynik 
-''' - -MATCH_LINK = ''' - -%s - -''' - -MATCH_SCORE = ''' - %.1f  -''' - -MATCH_TEAM_LINK = ''' -%s -''' - -MATCH_TEAM_NON_LINK = ''' -%s -''' - -MATCH_TEAM_ROW = ''' - - %s  - -%s - - -''' - -MATCH_RUNNING = ''' - -%d - -''' - -MATCH_GRID = ''' -
- -%s - -
-''' - -MATCH_GRID_PHASE_LINK = ''' - -%s - -''' - -MATCH_GRID_PHASE_NON_LINK = ''' - -

%s

-
-''' - -MATCH_GRID_PHASE = ''' -%s -''' - -MATCH_GRID_PHASE_RUNNING = ''' - -%s - -''' - -MATCH_BOX = ''' -
-%s -
-''' - -LEADERBOARD = ''' - - - - - - - - - - - -%s -
 KLASYFIKACJA KOŃCOWA 
 
 miejsce  drużyna 
-''' - -LEADERBOARD_ROW = ''' - -%d - - %s  %s  - - -''' - -LEADERBOARD_ROW_FLAG = ''' - -''' - -LEADERBOARD_CAPTION_TABLE = ''' - - - -%s -
 
 LEGENDA 
-''' - -LEADERBOARD_CAPTION_TABLE_ROW = ''' - - - %s  - - -''' - -PAGE_HEAD = ''' - - - - - - -%s -%s - - -''' - -PAGE_HEAD_REFRESH = ''' - -''' - -PAGE_BODY = ''' - -%s -%s -

-%s -

-%s -%s -%s -''' - -PAGE_BODY_FOOTER = ''' -

 Admin ©Jan Romański'2005, PlayOff ©Michał Klichowicz'2017-2018, strona wygenerowana %s

-''' - -PAGE = ''' - - - -%s - - -%s - - -''' - -SWISS_LINK = ''' -[ %s ]

-''' - -SWISS_RUNNING_LINK = ''' -[  %s  ]

-''' - -SWISS_DEFAULT_LABEL = 'Turniej o %d. miejsce' +class TemplateStrings(object): + + MATCH_TABLE = ''' + + + + + + %s +
  wynik 
+ ''' + + MATCH_LINK = ''' + + %s + + ''' + + MATCH_SCORE = ''' +  %.1f  + ''' + + MATCH_TEAM_LINK = ''' + %s + ''' + + MATCH_TEAM_NON_LINK = ''' + %s + ''' + + MATCH_TEAM_ROW = ''' + +  %s  + + %s + + + ''' + + MATCH_RUNNING = ''' + + %d + + ''' + + MATCH_GRID = ''' +
+ + %s + +
+ ''' + + MATCH_GRID_PHASE_LINK = ''' + + %s + + ''' + + MATCH_GRID_PHASE_NON_LINK = ''' + +

%s

+
+ ''' + + MATCH_GRID_PHASE = ''' + %s + ''' + + MATCH_GRID_PHASE_RUNNING = ''' + + %s + + ''' + + MATCH_BOX = ''' +
+ %s +
+ ''' + + LEADERBOARD = ''' + + + + + + + + + + + + %s +
 KLASYFIKACJA KOŃCOWA 
 
 miejsce  drużyna 
+ ''' + + LEADERBOARD_ROW = ''' + + %d + +  %s  %s  + + + ''' + + LEADERBOARD_ROW_FLAG = ''' + + ''' + + LEADERBOARD_CAPTION_TABLE = ''' + + + + %s +
 
 LEGENDA 
+ ''' + + LEADERBOARD_CAPTION_TABLE_ROW = ''' + + +  %s  + + + ''' + + PAGE_HEAD = ''' + + + + + + + %s + %s + + + ''' + + PAGE_HEAD_REFRESH = ''' + + ''' + + PAGE_BODY = ''' + + %s + %s +

+ %s +

+ %s + %s + %s + ''' + + PAGE_BODY_FOOTER = ''' +

 Admin ©Jan Romański'2005, PlayOff ©Michał Klichowicz'2017-2018, strona wygenerowana %s

+ ''' + + PAGE = ''' + + + + %s + + + %s + + + ''' + + SWISS_LINK = ''' + [ %s ]

+ ''' + + SWISS_RUNNING_LINK = ''' + [  %s  ]

+ ''' + + SWISS_DEFAULT_LABEL = 'Turniej o %d. miejsce' + +class Template(object): + + @staticmethod + def get(string, *params): + return getattr(TemplateStrings, string).decode('utf8') % params -- cgit v1.2.3 From 0bb79de94e9bf78deb76dadb4a02133942665c6b Mon Sep 17 00:00:00 2001 From: emkael Date: Tue, 1 May 2018 13:01:32 +0200 Subject: Class names specified --- jfr_playoff/generator.py | 2 +- jfr_playoff/template.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'jfr_playoff/generator.py') diff --git a/jfr_playoff/generator.py b/jfr_playoff/generator.py index e5d29a8..ce3a6f8 100644 --- a/jfr_playoff/generator.py +++ b/jfr_playoff/generator.py @@ -1,6 +1,6 @@ from datetime import datetime -from jfr_playoff.template import Template as p_temp +from jfr_playoff.template import PlayoffTemplate as p_temp from jfr_playoff.data import PlayoffData diff --git a/jfr_playoff/template.py b/jfr_playoff/template.py index 0699c1e..64bc0e7 100644 --- a/jfr_playoff/template.py +++ b/jfr_playoff/template.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -class TemplateStrings(object): +class PlayoffTemplateStrings(object): MATCH_TABLE = ''' @@ -181,8 +181,8 @@ class TemplateStrings(object): SWISS_DEFAULT_LABEL = 'Turniej o %d. miejsce' -class Template(object): +class PlayoffTemplate(object): @staticmethod def get(string, *params): - return getattr(TemplateStrings, string).decode('utf8') % params + return getattr(PlayoffTemplateStrings, string).decode('utf8') % params -- cgit v1.2.3 From 72c30e7b12a75d43b64e31094bf3f9d3a899fe65 Mon Sep 17 00:00:00 2001 From: emkael Date: Tue, 1 May 2018 13:07:00 +0200 Subject: Instantation of template "engine" with i18n config --- jfr_playoff/generator.py | 56 +++++++++++++++++++++++++----------------------- jfr_playoff/template.py | 6 ++++-- 2 files changed, 33 insertions(+), 29 deletions(-) (limited to 'jfr_playoff/generator.py') diff --git a/jfr_playoff/generator.py b/jfr_playoff/generator.py index ce3a6f8..34d12e7 100644 --- a/jfr_playoff/generator.py +++ b/jfr_playoff/generator.py @@ -1,6 +1,6 @@ from datetime import datetime -from jfr_playoff.template import PlayoffTemplate as p_temp +from jfr_playoff.template import PlayoffTemplate from jfr_playoff.data import PlayoffData @@ -14,6 +14,8 @@ class PlayoffGenerator(object): self.leaderboard_classes = {} if settings.has_section('position_styles'): self.leaderboard_classes = settings.get('position_styles') + self.p_temp = PlayoffTemplate( + settings.get('i18n') if settings.has_section('i18n') else {}) def generate_content(self): match_grid = self.get_match_grid( @@ -21,81 +23,81 @@ class PlayoffGenerator(object): self.data.generate_phases(), self.data.fill_match_info()) leaderboard_table = self.get_leaderboard_table() - return p_temp.get( + return self.p_temp.get( 'PAGE', - p_temp.get( + self.p_temp.get( 'PAGE_HEAD', - p_temp.get( + self.p_temp.get( 'PAGE_HEAD_REFRESH', self.page['refresh']) \ if self.page['refresh'] > 0 else '', self.page['title']), - p_temp.get( + self.p_temp.get( 'PAGE_BODY', self.page['logoh'], match_grid, self.get_swiss_links(), leaderboard_table, self.get_leaderboard_caption_table() if leaderboard_table else '', - p_temp.get( + self.p_temp.get( 'PAGE_BODY_FOOTER', datetime.now().strftime('%Y-%m-%d o %H:%M:%S')))) def get_match_table(self, match): rows = '' for team in match.teams: - score_html = p_temp.get('MATCH_SCORE', team.score) + score_html = self.p_temp.get('MATCH_SCORE', team.score) team_label = ' / '.join([ self.data.get_shortname(name) for name in team.name.split('
')]) - team_html = p_temp.get( + team_html = self.p_temp.get( 'MATCH_TEAM_LINK', match.link, team.name, team_label) \ if match.link is not None \ - else p_temp.get( + else self.p_temp.get( 'MATCH_TEAM_NON_LINK', team.name, team_label) - rows += p_temp.get( + rows += self.p_temp.get( 'MATCH_TEAM_ROW', ' '.join([ 'winner' if team.name == match.winner else '', 'loser' if team.name == match.loser else '' ]).strip(), team_html, - p_temp.get( + self.p_temp.get( 'MATCH_LINK', match.link, score_html) \ if match.link is not None else score_html) - html = p_temp.get( + html = self.p_temp.get( 'MATCH_TABLE', int(self.page['width'] * 0.75), int(self.page['width'] * 0.25), rows) if match.running > 0: - running_html = p_temp.get('MATCH_RUNNING', match.running) - html += p_temp.get('MATCH_LINK', match.link, running_html) if match.link is not None else running_html + running_html = self.p_temp.get('MATCH_RUNNING', match.running) + html += self.p_temp.get('MATCH_LINK', match.link, running_html) if match.link is not None else running_html return html def get_phase_header(self, phase, position): - grid_header = p_temp.get( + grid_header = self.p_temp.get( 'MATCH_GRID_PHASE_RUNNING' if phase.running \ else 'MATCH_GRID_PHASE', phase.title) if phase.link is not None: - return p_temp.get( + return self.p_temp.get( 'MATCH_GRID_PHASE_LINK', phase.link, self.page['width'], position, grid_header) else: - return p_temp.get( + return self.p_temp.get( 'MATCH_GRID_PHASE_NON_LINK', self.page['width'], position, grid_header) def get_match_box(self, match, position): if match is not None: - return p_temp.get( + return self.p_temp.get( 'MATCH_BOX', position[0], position[1], match.id, @@ -131,7 +133,7 @@ class PlayoffGenerator(object): (grid_x, grid_y)) row_no += 1 col_no += 1 - return p_temp.get( + return self.p_temp.get( 'MATCH_GRID', canvas_size[0], canvas_size[1], canvas_size[0], canvas_size[1], @@ -152,10 +154,10 @@ class PlayoffGenerator(object): rows = '' for style in self.leaderboard_classes: if 'caption' in style: - rows += p_temp.get( + rows += self.p_temp.get( 'LEADERBOARD_CAPTION_TABLE_ROW', style['class'], style['caption']) - return p_temp.get('LEADERBOARD_CAPTION_TABLE', rows) if rows else '' + return self.p_temp.get('LEADERBOARD_CAPTION_TABLE', rows) if rows else '' def get_leaderboard_table(self): leaderboard = self.data.fill_leaderboard() @@ -164,27 +166,27 @@ class PlayoffGenerator(object): position = 1 rows = '' for team in leaderboard: - rows += p_temp.get( + rows += self.p_temp.get( 'LEADERBOARD_ROW', self.get_leaderboard_row_class(position), position, self.get_flag(team), team or '') position += 1 - html = p_temp.get('LEADERBOARD', rows) + html = self.p_temp.get('LEADERBOARD', rows) return html def get_swiss_links(self): info = [] for event in self.data.get_swiss_info(): - event_label = p_temp.get('SWISS_DEFAULT_LABEL', event['position']) + event_label = self.p_temp.get('SWISS_DEFAULT_LABEL', event['position']) if 'label' in event and event['label'] is not None: event_label = event['label'] - info.append((p_temp.get('SWISS_LINK') \ + info.append((self.p_temp.get('SWISS_LINK') \ if event['finished'] \ - else p_temp.get( + else self.p_temp.get( 'SWISS_RUNNING_LINK', event['link'], event_label))) return '\n'.join(info) def get_flag(self, team): flag = self.data.get_team_image(team) - return '' if flag is None else p_temp.get('LEADERBOARD_ROW_FLAG', flag) + return '' if flag is None else self.p_temp.get('LEADERBOARD_ROW_FLAG', flag) diff --git a/jfr_playoff/template.py b/jfr_playoff/template.py index 64bc0e7..5fd0c45 100644 --- a/jfr_playoff/template.py +++ b/jfr_playoff/template.py @@ -183,6 +183,8 @@ class PlayoffTemplateStrings(object): class PlayoffTemplate(object): - @staticmethod - def get(string, *params): + def __init__(self, settings): + self.settings = settings + + def get(self, string, *params): return getattr(PlayoffTemplateStrings, string).decode('utf8') % params -- cgit v1.2.3 From 5b527501aff6e529146a91364fa1a1b1485ef11e Mon Sep 17 00:00:00 2001 From: emkael Date: Tue, 22 May 2018 11:50:40 +0200 Subject: Fixing vertical positioning of match boxes if there's a single match in every phase --- jfr_playoff/generator.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'jfr_playoff/generator.py') diff --git a/jfr_playoff/generator.py b/jfr_playoff/generator.py index 2b5aaf0..98bd3fc 100644 --- a/jfr_playoff/generator.py +++ b/jfr_playoff/generator.py @@ -109,7 +109,8 @@ class PlayoffGenerator(object): match_height = canvas_size[1] / len(phase.matches) row_no = 0 for match in phase.matches: - grid_y = int(row_no * match_height + + grid_y = self.page['margin'] / 2 if dimensions[1] == 1 else \ + int(row_no * match_height + 0.5 * (match_height - self.page['height'])) grid_boxes += self.get_match_box( matches[match] if match is not None else None, -- cgit v1.2.3 From 78a319e7babdcde172afae18a2f7e21d8d16cd4b Mon Sep 17 00:00:00 2001 From: emkael Date: Fri, 6 Jul 2018 01:24:40 +0200 Subject: Adjusting match box column widths to accommodate margins/borders, so the table fits the bounding box --- jfr_playoff/generator.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'jfr_playoff/generator.py') diff --git a/jfr_playoff/generator.py b/jfr_playoff/generator.py index 98bd3fc..0eaee85 100644 --- a/jfr_playoff/generator.py +++ b/jfr_playoff/generator.py @@ -55,8 +55,8 @@ class PlayoffGenerator(object): team_html, p_temp.MATCH_LINK % (match.link, score_html) if match.link is not None else score_html) html = p_temp.MATCH_TABLE.decode('utf8') % ( - int(self.page['width'] * 0.75), - int(self.page['width'] * 0.25), + int(self.page['width'] * 0.7), + int(self.page['width'] * 0.2), rows) if match.running > 0: running_html = p_temp.MATCH_RUNNING % (match.running) -- cgit v1.2.3 From c8bf307f4a5782b84e0ba5b0f204f01dcbcee9e9 Mon Sep 17 00:00:00 2001 From: emkael Date: Thu, 9 Aug 2018 00:51:55 +0200 Subject: Fixing parameters for swiss links --- jfr_playoff/generator.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'jfr_playoff/generator.py') diff --git a/jfr_playoff/generator.py b/jfr_playoff/generator.py index 22bdc82..c4a053e 100644 --- a/jfr_playoff/generator.py +++ b/jfr_playoff/generator.py @@ -197,7 +197,8 @@ class PlayoffGenerator(object): event_label = self.p_temp.get('SWISS_DEFAULT_LABEL', event['position']) if 'label' in event and event['label'] is not None: event_label = event['label'] - info.append((self.p_temp.get('SWISS_LINK') \ + info.append((self.p_temp.get('SWISS_LINK', + event['link'], event_label) \ if event['finished'] \ else self.p_temp.get( 'SWISS_RUNNING_LINK', -- cgit v1.2.3 From 9a42b9f29d4b51f6e777cea0dc2bd750d102fa13 Mon Sep 17 00:00:00 2001 From: emkael Date: Thu, 9 Aug 2018 10:26:51 +0200 Subject: Shortening long (multiple) team labels --- jfr_playoff/generator.py | 1 + 1 file changed, 1 insertion(+) (limited to 'jfr_playoff/generator.py') diff --git a/jfr_playoff/generator.py b/jfr_playoff/generator.py index 59c83a6..66e9a01 100644 --- a/jfr_playoff/generator.py +++ b/jfr_playoff/generator.py @@ -57,6 +57,7 @@ class PlayoffGenerator(object): team_label = ' / '.join([ self.data.get_shortname(name) for name in team.name.split('
')]) + team_label = team_label[:30] + (team_label[30:] and '(...)') team_html = self.p_temp.get( 'MATCH_TEAM_LINK', match.link, team.name, team_label) \ -- cgit v1.2.3 From 714a198c3cd4f0975c57010b3888d98057e6bb7c Mon Sep 17 00:00:00 2001 From: emkael Date: Fri, 28 Sep 2018 12:32:36 +0200 Subject: Customize label character limit Fixes #27 --- CONFIG.md | 1 + jfr_playoff/generator.py | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) (limited to 'jfr_playoff/generator.py') diff --git a/CONFIG.md b/CONFIG.md index 906081f..3a26f81 100644 --- a/CONFIG.md +++ b/CONFIG.md @@ -25,6 +25,7 @@ Konfiguracja składa się, po kolei, z: + `"refresh"` - parametr odświeżania strony drabinki: `0` = wyłączone, liczba naturalna = interwał odświeżania, w sekundach + `"width"` i `"height"` - wymiary (w pikselach) miejsca rezerwowanego dla każdego meczu w widoku drabinki (`"width"` bezpośrednio wpływa na rozmieszczanie kolumn, wewnątrz każdej z kolumn mecze rozmieszczane są równomiernie, w zależnie od ich liczby) + `"margin"` - odstęp między w/w miejscem (minimalny - jak widać, w przypadku mniejszej liczby meczów w fazie, odstępy się dopasują) + + `"label_length_limit"` - maksymalna liczba znaków wyświetlanych jako skrócona nazwa drużyn(y) w schemacie (`0` lub brak wartości oznacza brak limitu) - sekcji `"canvas"`: ustawień rysowania linii + `"winner_h_offset"`, `"winner_v_offset"` - marginesy (poziomy i pionowy) rysowania linii zwycięzców (odpowiednio: pionowych i poziomych, względem środka obszaru) + `"loser_h_offset"`, `"loser_v_offset"` - analogiczne marginesy rysowania linii przegranych diff --git a/jfr_playoff/generator.py b/jfr_playoff/generator.py index 66e9a01..5dfed13 100644 --- a/jfr_playoff/generator.py +++ b/jfr_playoff/generator.py @@ -57,7 +57,10 @@ class PlayoffGenerator(object): team_label = ' / '.join([ self.data.get_shortname(name) for name in team.name.split('
')]) - team_label = team_label[:30] + (team_label[30:] and '(...)') + label_max_length = self.page['label_length_limit'] \ + if 'label_length_limit' in self.page else 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) \ -- cgit v1.2.3 From 72e52cf8c572f262d022acaa1eb1aa65bccb099e Mon Sep 17 00:00:00 2001 From: emkael Date: Fri, 28 Sep 2018 17:37:16 +0200 Subject: Refactoring of some config dictionary default value fetches --- jfr_playoff/data.py | 37 +++++++++++++------------------------ jfr_playoff/generator.py | 5 ++--- jfr_playoff/matchinfo.py | 5 +---- jfr_playoff/tournamentinfo.py | 7 ++++--- 4 files changed, 20 insertions(+), 34 deletions(-) (limited to 'jfr_playoff/generator.py') diff --git a/jfr_playoff/data.py b/jfr_playoff/data.py index 9f9a0c2..6adf00c 100644 --- a/jfr_playoff/data.py +++ b/jfr_playoff/data.py @@ -36,18 +36,16 @@ class PlayoffData(object): def generate_phases(self): self.grid = [] for phase in self.phases: - phase_count = len(phase['matches']) - if 'dummies' in phase: - phase_count += len(phase['dummies']) + dummies = phase.get('dummies', []) + phase_count = len(phase['matches']) + len(dummies) phase_object = Phase() phase_object.title = phase['title'] - phase_object.link = phase['link'] if 'link' in phase else None + phase_object.link = phase.get('link', None) phase_object.matches = [None] * phase_count phase_pos = 0 for match in phase['matches']: - if 'dummies' in phase: - while phase_pos in phase['dummies']: - phase_pos += 1 + while phase_pos in dummies: + phase_pos += 1 phase_object.matches[phase_pos] = match['id'] phase_pos += 1 PlayoffLogger.get('data').info('phase object: %s', phase_object) @@ -73,8 +71,7 @@ class PlayoffData(object): def get_swiss_link(self, event): event_info = TournamentInfo(event, self.database) swiss_link = event_info.get_results_link() - if ('relative_path' in event) and ( - event['relative_path'] is not None): + if event.get('relative_path', None): swiss_link = '%s/%s' % (event['relative_path'], swiss_link) PlayoffLogger.get('data').info('swiss link: %s', swiss_link) return swiss_link @@ -94,16 +91,8 @@ class PlayoffData(object): event['ties'] = teams event_info = TournamentInfo(event, self.database) if event_info.is_finished(): - swiss_position = ( - event['swiss_position'] - if 'swiss_position' in event - else 1 - ) - position_limit = ( - event['position_to'] - if 'position_to' in event - else 9999 - ) + swiss_position = event.get('swiss_position', 1) + position_limit = event.get('position_to', 9999) place = 1 swiss_results = event_info.get_tournament_results() for team in swiss_results: @@ -156,7 +145,7 @@ class PlayoffData(object): swiss_info = [{ 'link': self.get_swiss_link(event), 'position': event['position'], - 'label': event['label'] if 'label' in event else None, + 'label': event.get('label', None), 'finished': TournamentInfo(event, self.database).is_finished() } for event in self.swiss] PlayoffLogger.get('data').info('swiss info: %s', swiss_info) @@ -166,10 +155,10 @@ class PlayoffData(object): dimensions = ( len(self.phases), max([ - len(phase['matches']) + len(phase['dummies']) - if 'dummies' in phase - else len(phase['matches']) - for phase in self.phases])) + len(phase['matches']) + len(phase.get('dummies', [])) + for phase in self.phases + ]) + ) PlayoffLogger.get('data').info('grid dimensions: %s', dimensions) return dimensions diff --git a/jfr_playoff/generator.py b/jfr_playoff/generator.py index 5dfed13..d358d86 100644 --- a/jfr_playoff/generator.py +++ b/jfr_playoff/generator.py @@ -57,8 +57,7 @@ class PlayoffGenerator(object): team_label = ' / '.join([ self.data.get_shortname(name) for name in team.name.split('
')]) - label_max_length = self.page['label_length_limit'] \ - if 'label_length_limit' in self.page else 0 + 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( @@ -199,7 +198,7 @@ class PlayoffGenerator(object): info = [] for event in self.data.get_swiss_info(): event_label = self.p_temp.get('SWISS_DEFAULT_LABEL', event['position']) - if 'label' in event and event['label'] is not None: + if event.get('label', None): event_label = event['label'] info.append((self.p_temp.get('SWISS_LINK', event['link'], event_label) \ diff --git a/jfr_playoff/matchinfo.py b/jfr_playoff/matchinfo.py index dd2ee30..ab742d4 100644 --- a/jfr_playoff/matchinfo.py +++ b/jfr_playoff/matchinfo.py @@ -191,10 +191,7 @@ class MatchInfo: if scores_fetched: PlayoffLogger.get('matchinfo').info( 'pre-defined scores for match #%d fetched', self.info.id) - if 'running' in self.config: - self.info.running = int(self.config['running']) - else: - self.info.running = -1 + self.info.running = int(self.config.get('running', -1)) if not teams_fetched: try: try: diff --git a/jfr_playoff/tournamentinfo.py b/jfr_playoff/tournamentinfo.py index a646d4e..45a7752 100644 --- a/jfr_playoff/tournamentinfo.py +++ b/jfr_playoff/tournamentinfo.py @@ -169,11 +169,12 @@ class TournamentInfo: PlayoffLogger.get('tournamentinfo').warning( 'cannot determine tournament results from HTML: %s(%s)', type(e).__name__, str(e)) - if self.is_finished() and 'final_positions' in self.settings: + if self.is_finished(): + final_positions = self.settings.get('final_positions', []) PlayoffLogger.get('tournamentinfo').info( 'setting final positions from tournament results: %s', - self.settings['final_positions']) - for position in self.settings['final_positions']: + final_positions) + for position in final_positions: if len(teams) >= position: teams[position-1].append(position) return teams -- cgit v1.2.3