Jon Solow
Write out the position label for each slot for better clarity and mobile
bfd954e
raw
history blame
3.09 kB
import pandas as pd
import streamlit as st
from config import DEFAULT_ICON
from shared_page import common_page_config
from data_storage import get_all_users, get_all_rosters
from domain.playoffs import CURRENT_PLAYOFF_WEEK, PLAYOFF_WEEK_TO_NAME
from load_options import get_map_week_player_id_option, PlayerOption, display_player
POSITION_LABELS = [
"QB-1",
"RB-1",
"RB-2",
"WR-1",
"WR-2",
"TE-1",
"K-1",
"DEF-1",
]
def display_user_names():
users_names = get_users_df()["name"]
st.markdown("<h2>Users</h2>", unsafe_allow_html=True)
st.dataframe(users_names, hide_index=True)
def get_users_df():
columns = ["user_id", "name"]
all_users = pd.DataFrame(get_all_users(columns_included=columns), columns=columns)
return all_users
@st.cache_data(ttl=60 * 60)
def load_masked_rosters() -> dict[int, dict[str, PlayerOption]]:
options_map = get_map_week_player_id_option()
roster_user_position_map: dict[int, dict[str, PlayerOption]] = {}
for user_id, position_id, player_id in get_all_rosters():
if user_id not in roster_user_position_map:
roster_user_position_map[user_id] = {}
week = int(position_id[0])
player = PlayerOption.empty_player(week=week)
if selected_player := options_map[week].get(player_id):
if selected_player.is_locked():
player = selected_player
else:
player = PlayerOption.hidden_player(week=week)
roster_user_position_map[user_id][position_id] = player
return roster_user_position_map
def display_user_row(week: int, user_name: str, user_map: dict[str, PlayerOption]):
selection_cols = st.columns(1 + len(POSITION_LABELS))
# first col is name
with selection_cols[0]:
st.write(user_name)
for pos_label, st_col in zip(POSITION_LABELS, selection_cols[1:]):
week_pos_label = f"{week}-{pos_label}"
with st_col:
st.write(pos_label.split("-")[0])
player = user_map.get(week_pos_label, PlayerOption.empty_player(week=week))
display_player(player)
def display_masked_rosters(week: int):
rosters = load_masked_rosters()
users = get_users_df()
for row in users.itertuples():
user_roster_map = rosters.get(row.user_id, {})
display_user_row(week, row.name, user_roster_map)
def display_rosters():
st.markdown("<h2>Rosters</h2>", unsafe_allow_html=True)
options = list(PLAYOFF_WEEK_TO_NAME.keys())
default_selection = options.index(CURRENT_PLAYOFF_WEEK)
week_selected = st.selectbox(
"Week",
options=options,
index=default_selection,
key="roster_week_select",
format_func=lambda x: PLAYOFF_WEEK_TO_NAME[x],
)
display_masked_rosters(week_selected)
def get_page():
page_title = "Pool Scoreboard"
st.set_page_config(page_title=page_title, page_icon=DEFAULT_ICON, layout="wide")
common_page_config()
st.title(page_title)
display_user_names()
display_rosters()
if __name__ == "__main__":
get_page()