Jon Solow commited on
Commit
b48eb8f
·
1 Parent(s): 01d0fea

Get scoreboard semi-formatted and working

Browse files
Files changed (1) hide show
  1. src/pages/11_Scoreboard.py +96 -13
src/pages/11_Scoreboard.py CHANGED
@@ -6,7 +6,7 @@ from shared_page import common_page_config
6
 
7
  from data_storage import get_all_users, get_all_rosters
8
  from domain.playoffs import CURRENT_PLAYOFF_WEEK, PLAYOFF_WEEK_TO_NAME
9
- from load_options import get_map_week_player_id_option, PlayerOption, display_player
10
 
11
 
12
  POSITION_LABELS = [
@@ -41,31 +41,114 @@ def load_masked_rosters() -> dict[int, dict[str, PlayerOption]]:
41
  if selected_player.is_locked():
42
  player = selected_player
43
  else:
44
- player = PlayerOption.hidden_player(week=week)
45
  roster_user_position_map[user_id][position_id] = player
46
 
47
  return roster_user_position_map
48
 
49
 
50
- def display_user_row(week: int, user_name: str, user_map: dict[str, PlayerOption]):
51
- selection_cols = st.columns(1 + len(POSITION_LABELS))
52
- # first col is name
53
- with selection_cols[0]:
54
- st.write(user_name)
55
- for pos_label, st_col in zip(POSITION_LABELS, selection_cols[1:]):
56
  week_pos_label = f"{week}-{pos_label}"
57
- with st_col:
58
- st.write(pos_label.split("-")[0])
59
- player = user_map.get(week_pos_label, PlayerOption.empty_player(week=week))
60
- display_player(player)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61
 
62
 
63
  def display_masked_rosters(week: int):
64
  rosters = load_masked_rosters()
65
  users = get_users_df()
 
 
 
 
66
  for row in users.itertuples():
67
  user_roster_map = rosters.get(row.user_id, {})
68
- display_user_row(week, row.name, user_roster_map)
 
 
 
 
69
 
70
 
71
  def display_rosters():
 
6
 
7
  from data_storage import get_all_users, get_all_rosters
8
  from domain.playoffs import CURRENT_PLAYOFF_WEEK, PLAYOFF_WEEK_TO_NAME
9
+ from load_options import get_map_week_player_id_option, PlayerOption
10
 
11
 
12
  POSITION_LABELS = [
 
41
  if selected_player.is_locked():
42
  player = selected_player
43
  else:
44
+ player = PlayerOption.hidden_player(week=week, position=selected_player.position)
45
  roster_user_position_map[user_id][position_id] = player
46
 
47
  return roster_user_position_map
48
 
49
 
50
+ def get_roster_html_str(week: int, user_map: dict[str, PlayerOption]) -> str:
51
+ players_str = ""
52
+ for pos_label in POSITION_LABELS:
 
 
 
53
  week_pos_label = f"{week}-{pos_label}"
54
+ player = user_map.get(week_pos_label, PlayerOption.empty_player(week=week))
55
+ players_str += get_player_html_str(player)
56
+ roster_str = f"""<ul className='user__roster'>
57
+ {players_str}
58
+ </ul>"""
59
+ return roster_str
60
+
61
+
62
+ def get_player_html_str(player_opt: PlayerOption) -> str:
63
+ # TODO
64
+ multiplier = 1
65
+ game_status = " "
66
+ score = 0
67
+ game_score = " "
68
+ stats: list = []
69
+ player_stats = get_player_stats_html_str(stats)
70
+
71
+ player_classes = "player"
72
+ if player_opt.team:
73
+ player_classes += f" player--{player_opt.team.upper()}"
74
+
75
+ image_classes = "player__image"
76
+ multiplier_classes = "player__multiplier"
77
+ if multiplier > 1:
78
+ image_classes += f" player__image--{multiplier}"
79
+ multiplier_classes += f" player__multiplier--{multiplier}"
80
+
81
+ if not (player_image_url := player_opt.headshot_url):
82
+ player_image_url = "https://static.www.nfl.com/w_200,h_200,c_fill/league/suxzfdslsj5vpwbin5t8"
83
+
84
+ player_str = f"""<li className='{player_classes}'>
85
+ <div className="player__position">{player_opt.position}</div>
86
+ <div className={image_classes}>
87
+ <img className="player__img" src={player_image_url} alt='{player_opt.full_name}' />
88
+ </div>
89
+ <div className="player__name">{player_opt.full_name}</div>
90
+ <div className="player__team">{player_opt.team}</div>
91
+ <span className="player__score">{score}</span>
92
+ <span className='{multiplier_classes}'>{multiplier}X</span>
93
+ <span className="player__game-status">{game_status}</span>
94
+ <span className="player__game-score">{game_score}</span>
95
+ {player_stats}
96
+ </li>"""
97
+
98
+ return player_str
99
+
100
+
101
+ def get_stat_list_item_html_str(stat) -> str:
102
+ # TODO
103
+ stat_key = "TODO"
104
+ stat_value = "TODO"
105
+
106
+ return f"""<li className="stat">
107
+ <div className="stat__key">{stat_key}</div>
108
+ <div className="stat__value">{stat_value}</div>
109
+ </li>"""
110
+
111
+
112
+ def get_player_stats_html_str(stats_list: list) -> str:
113
+ stat_items_str = "\n".join([get_stat_list_item_html_str(s) for s in stats_list])
114
+ stats_str = f"""<ul className="player-stats">{stat_items_str}</ul>"""
115
+ return stats_str
116
+
117
+
118
+ def get_user_html_str(week: int, user_name: str, user_map: dict[str, PlayerOption]) -> str:
119
+ user_str = ""
120
+
121
+ # TODO
122
+ place = 1
123
+ score_type = "Score"
124
+ week_score = 0
125
+ roster_html_str = get_roster_html_str(week, user_map)
126
+ user_str += f"""
127
+ <li className="user">
128
+ <span className="user__place">{place}</span>
129
+ <span className="user__username">{user_name}</span>
130
+ <span className="user__username">{user_name}</span>
131
+ <span className="user__score-type">{score_type}</span>
132
+ <span className="user__score-number">{week_score}</span>
133
+ {roster_html_str}
134
+ </li>"""
135
+ return user_str
136
 
137
 
138
  def display_masked_rosters(week: int):
139
  rosters = load_masked_rosters()
140
  users = get_users_df()
141
+
142
+ scoreboard_str = ""
143
+
144
+ scoreboard_str += """<ol className="scoreboard">"""
145
  for row in users.itertuples():
146
  user_roster_map = rosters.get(row.user_id, {})
147
+ scoreboard_str += get_user_html_str(week, row.name, user_roster_map)
148
+
149
+ scoreboard_str += """</ol>"""
150
+
151
+ st.markdown(scoreboard_str, unsafe_allow_html=True)
152
 
153
 
154
  def display_rosters():