James McCool
Enhance Dockerfile and Streamlit app for secret management and environment variable usage
51c1a0b
import streamlit as st | |
import numpy as np | |
import pandas as pd | |
import pymongo | |
import os | |
st.set_page_config(layout="wide") | |
def init_conn(): | |
uri = os.getenv('mongo_uri') | |
client = pymongo.MongoClient(uri, retryWrites=True, serverSelectionTimeoutMS=500000) | |
db = client["MLB_Database"] | |
return db | |
db = init_conn() | |
st.markdown(""" | |
<style> | |
/* Tab styling */ | |
.stTabs [data-baseweb="tab-list"] { | |
gap: 8px; | |
padding: 4px; | |
} | |
.stTabs [data-baseweb="tab"] { | |
height: 50px; | |
white-space: pre-wrap; | |
background-color: #DAA520; | |
color: white; | |
border-radius: 10px; | |
gap: 1px; | |
padding: 10px 20px; | |
font-weight: bold; | |
transition: all 0.3s ease; | |
} | |
.stTabs [aria-selected="true"] { | |
background-color: #DAA520; | |
border: 3px solid #FFD700; | |
color: white; | |
} | |
.stTabs [data-baseweb="tab"]:hover { | |
background-color: #FFD700; | |
cursor: pointer; | |
} | |
div[data-baseweb="select"] > div { | |
background-color: #DAA520; | |
color: white; | |
} | |
div{ | |
box-sizing: content-box !important; | |
} | |
</style>""", unsafe_allow_html=True) | |
def init_baselines(): | |
db_pulls = ['Bullpen_Data', 'Hitter_Agg_Merge', 'Hitter_Long_Merge', 'Hitter_Short_Merge', 'Pitcher_Agg_Merge', 'Pitcher_Long_Merge', 'Pitcher_Short_Merge', | |
'Slate_Hitters_Merge', 'Slate_Team_Merge', 'Starting_Pitchers', 'True_AVG_Split', 'Pitcher_Info', 'Hitter_Info'] | |
for table in db_pulls: | |
collection = db[table] | |
cursor = collection.find() | |
df = pd.DataFrame(cursor) | |
if table == 'Bullpen_Data': | |
bp_data = df | |
elif table == 'Hitter_Agg_Merge': | |
hitter_agg = df | |
elif table == 'Hitter_Long_Merge': | |
hitter_long = df | |
elif table == 'Hitter_Short_Merge': | |
hitter_short = df | |
elif table == 'Pitcher_Agg_Merge': | |
pitcher_agg = df | |
elif table == 'Pitcher_Long_Merge': | |
pitcher_long = df | |
elif table == 'Pitcher_Short_Merge': | |
pitcher_short = df | |
elif table == 'Slate_Hitters_Merge': | |
slate_hitters = df | |
elif table == 'Slate_Team_Merge': | |
slate_team = df | |
elif table == 'Starting_Pitchers': | |
starting_pitchers = df | |
elif table == 'True_AVG_Split': | |
true_avg_split = df | |
elif table == 'Pitcher_Info': | |
pitcher_info = df | |
elif table == 'Hitter_Info': | |
hitter_info = df | |
return bp_data, hitter_agg, hitter_long, hitter_short, pitcher_agg, pitcher_long, pitcher_short, slate_hitters, slate_team, starting_pitchers, true_avg_split, pitcher_info, hitter_info | |
bp_data, hitter_agg, hitter_long, hitter_short, pitcher_agg, pitcher_long, pitcher_short, slate_hitters, slate_team, starting_pitchers, true_avg_split, pitcher_info, hitter_info = init_baselines() | |
pitcher_tab, hitter_tab, team_tab = st.tabs(['Pitchers', 'Hitters', 'Team']) | |
with pitcher_tab: | |
with st.expander('Info and Display Options'): | |
st.info('Note: Splits options are available for all baseline tables, they do not apply to True AVG, HWSr, or the Overview tables') | |
col1, col2, col3 = st.columns(3) | |
with col1: | |
site_var_sp = st.selectbox('Site', ['DraftKings', 'FanDuel'], key = 'site_var_sp') | |
with col2: | |
table_var_sp = st.selectbox('Table', ['True AVG Splits', 'HWSr Splits', 'Current Slate Overview', 'Active Baselines', 'League Aggregate Baselines', 'League Short Term Baselines', 'League Long Term Baselines'], key = 'table_var_sp') | |
with col3: | |
splits_var_sp = st.selectbox('Splits', ['Overall', 'RHH', 'LHH'], key = 'splits_var_sp') | |
if table_var_sp == 'True AVG Splits': | |
st.dataframe(true_avg_split) | |
elif table_var_sp == 'HWSr Splits': | |
st.dataframe(true_avg_split) | |
elif table_var_sp == 'Current Slate Overview': | |
st.dataframe(starting_pitchers) | |
elif table_var_sp == 'Active Baselines': | |
st.dataframe(pitcher_info) | |
elif table_var_sp == 'League Aggregate Baselines': | |
st.dataframe(pitcher_agg) | |
elif table_var_sp == 'League Short Term Baselines': | |
st.dataframe(pitcher_short) | |
elif table_var_sp == 'League Long Term Baselines': | |
st.dataframe(pitcher_long) | |
with hitter_tab: | |
with st.expander('Info and Display Options'): | |
st.info('Note: Splits options are available for all baseline tables') | |
col1, col2, col3 = st.columns(3) | |
with col1: | |
site_var_hitter = st.selectbox('Site', ['DraftKings', 'FanDuel'], key = 'site_var_hitter') | |
with col2: | |
table_var_hitter = st.selectbox('Table', ['Active Baselines', 'League Aggregate Baselines', 'League Short Term Baselines', 'League Long Term Baselines'], key = 'table_var_hitter') | |
with col3: | |
splits_var_hitter = st.selectbox('Splits', ['Overall', 'RHP', 'LHP'], key = 'splits_var_hitter') | |
if table_var_hitter == 'Current Slate Overview': | |
st.dataframe(starting_pitchers) | |
elif table_var_hitter == 'Active Baselines': | |
st.dataframe(hitter_info) | |
elif table_var_hitter == 'League Aggregate Baselines': | |
st.dataframe(hitter_agg) | |
elif table_var_hitter == 'League Short Term Baselines': | |
st.dataframe(hitter_short) | |
elif table_var_hitter == 'League Long Term Baselines': | |
st.dataframe(hitter_long) | |
with team_tab: | |
with st.expander('Info and Display Options'): | |
col1, col2, col3 = st.columns(3) | |
with col1: | |
site_var_team= st.selectbox('Site', ['DraftKings', 'FanDuel'], key = 'site_var_team') | |
with col2: | |
table_var_team = st.selectbox('Table', ['Team Baselines', 'Bullpen Baselines'], key = 'table_var_team') | |
if table_var_team == 'Team Baselines': | |
st.dataframe(slate_team) | |
elif table_var_team == 'Bullpen Baselines': | |
st.dataframe(bp_data) |