1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
from datetime import datetime
from urlparse import urljoin
import jfr_playoff.template as p_temp
from jfr_playoff.settings import PlayoffSettings
def get_shortname(fullname, teams):
for team in teams:
if team[0] == fullname:
return team[1]
return fullname
def get_team_image(fullname, teams):
for team in teams:
if team[0] == fullname and len(team) > 2:
if team[2] is not None:
return p_temp.LEADERBOARD_ROW_FLAG % (team[2])
return ''
def get_match_table(match, teams, page_settings):
rows = ''
for team in match.teams:
rows += p_temp.MATCH_TEAM_ROW % (
' '.join(['winner' if team.name == match.winner else '',
'loser' if team.name == match.loser else '']).strip(),
match.link,
team.name,
' / '.join([get_shortname(name, teams) for name in team.name.split('<br />')]),
match.link,
team.score
)
html = p_temp.MATCH_TABLE.decode('utf8') % (
int(page_settings['width'] * 0.75),
int(page_settings['width'] * 0.25),
rows
)
if match.running > 0:
html += p_temp.MATCH_RUNNING % (match.link, match.running)
return html
def get_match_grid(grid, phases, matches, page_settings, width, height, teams, canvas_settings):
grid_boxes = ''
col_no = 0
for column in grid:
grid_x = col_no * (page_settings['width'] + page_settings['margin'])
grid_header = p_temp.MATCH_GRID_PHASE_RUNNING if len([match for match in column if match is not None and matches[match].running > 0]) > 0 else p_temp.MATCH_GRID_PHASE
grid_boxes += grid_header % (
phases[col_no]['link'],
page_settings['width'],
grid_x,
phases[col_no]['title']
)
row_no = 0
column_height = height / len(column)
for match in column:
grid_y = int(row_no * column_height + 0.5 * (column_height - page_settings['height']))
if match is not None:
grid_boxes += p_temp.MATCH_BOX % (
grid_x, grid_y,
match,
' '.join([str(m) for m in matches[match].winner_matches]) if matches[match].winner_matches is not None else '',
' '.join([str(m) for m in matches[match].loser_matches]) if matches[match].loser_matches is not None else '',
get_match_table(matches[match], teams, page_settings)
)
row_no += 1
col_no += 1
canvas_attrs = []
for setting, value in canvas_settings.iteritems():
canvas_attrs.append(
'data-%s="%s"' % (setting.replace('_', '-'), str(value))
)
return p_temp.MATCH_GRID % (width, height, width, height, ' '.join(canvas_attrs), grid_boxes)
def get_leaderboard_table(leaderboard, teams):
if len([t for t in leaderboard if t is not None]) == 0:
return ''
position = 1
rows = ''
for team in leaderboard:
rows += p_temp.LEADERBOARD_ROW % (position, get_team_image(team, teams), team or '')
position +=1
html = p_temp.LEADERBOARD.decode('utf8') % (rows)
return html
def generate_content(grid, phases, match_info, teams, grid_width, grid_height, page_settings, canvas_settings, leaderboard):
return p_temp.PAGE % (
p_temp.PAGE_HEAD % (
p_temp.PAGE_HEAD_REFRESH % (page_settings['refresh']) if page_settings['refresh'] > 0 else '',
page_settings['title']
),
p_temp.PAGE_BODY % (
page_settings['logoh'],
get_match_grid(grid, phases, match_info, page_settings, grid_width, grid_height, teams, canvas_settings),
get_leaderboard_table(leaderboard, teams),
p_temp.PAGE_BODY_FOOTER.decode('utf8') % (datetime.now().strftime('%Y-%m-%d o %H:%M'))
)
)
from jfr_playoff.filemanager import PlayoffFileManager
def main():
s = PlayoffSettings()
phase_settings = s.get('phases')
from jfr_playoff.data import PlayoffData
data = PlayoffData(s)
grid = data.generate_phases()
match_info = data.fill_match_info()
leaderboard = data.fill_leaderboard()
page_settings = s.get('page')
grid_columns = len(phase_settings)
grid_rows = max([len(phase['matches']) + len(phase['dummies']) if 'dummies' in phase else len(phase['matches']) for phase in phase_settings])
grid_height = grid_rows * (page_settings['height'] + page_settings['margin']) - page_settings['margin']
grid_width = grid_columns * (page_settings['width'] + page_settings['margin']) - page_settings['margin']
content = generate_content(grid, phase_settings, match_info, s.get('teams'), grid_width, grid_height, page_settings, s.get('canvas') if s.has_section('canvas') else {}, leaderboard)
file_manager = PlayoffFileManager(s)
file_manager.write_content(content)
file_manager.copy_scripts()
file_manager.send_files()
main()
|