Jon Solow
commited on
Commit
·
b48eb8f
1
Parent(s):
01d0fea
Get scoreboard semi-formatted and working
Browse files- 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
|
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
|
51 |
-
|
52 |
-
|
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 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
-
|
|
|
|
|
|
|
|
|
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():
|