Spaces:
Running
Running
import gradio as gr | |
import matplotlib.pyplot as plt | |
import datetime | |
from plotting import create_daily_weekly_leaderboard | |
from data import data_df | |
def gr_create_daily_weekly_leaderboards(leaderboard_date, whiff_leaders, velo_leaders, data_df): | |
filenames = [] | |
for time_type in ('daily', 'weekly'): | |
for stat, leaders in zip(('whiff', 'velo'), (whiff_leaders, velo_leaders)): | |
create_daily_weekly_leaderboard(stat, leaderboard_date, time_type, leaders, data_df) | |
filename = f'{stat}_{time_type}.png' | |
plt.savefig(filename, bbox_inches='tight') | |
filenames.append(filename) | |
return filenames | |
def go_back_day(date): | |
return date - datetime.timedelta(days=1) | |
def go_forward_day(date): | |
return date + datetime.timedelta(days=1) | |
def go_back_week(date): | |
return date - datetime.timedelta(days=7) | |
def go_forward_week(date): | |
return date + datetime.timedelta(days=7) | |
def create_daily_weekly_leaderboard_app(data_df): | |
with gr.Blocks() as app: | |
gr.Markdown('# Daily/Weekly Leaderboards') | |
_data_df = gr.State(data_df) | |
with gr.Row(): | |
date_init = data_df['date'].max() | |
date_init = datetime.datetime(date_init.year, date_init.month, date_init.day) | |
leaderboard_date = gr.DateTime(date_init, include_time=False, type='datetime', label='Date') | |
whiff_leaders = gr.Number(10, precision=0, minimum=0, label='Whiff Leaders') | |
velo_leaders = gr.Number(10, precision=0, minimum=0, label='Velo Leaders') | |
search = gr.Button('Search') | |
with gr.Row(): | |
prev_week = gr.Button('Previous Week') | |
prev_day = gr.Button('Previous Day') | |
next_day = gr.Button('Next Day') | |
next_week = gr.Button('Next Week') | |
leaderboards = [] | |
for time_type in ('Daily', 'Weekly'): | |
with gr.Row(): | |
gr.Markdown(f'## {time_type}') | |
with gr.Row(): | |
for stat in ('Whiff', 'Velo'): | |
leaderboards.append(gr.Image(label=f'{time_type} {stat} Leaderboard', height=512)) | |
search.click(gr_create_daily_weekly_leaderboards, inputs=[leaderboard_date, whiff_leaders, velo_leaders, _data_df], outputs=leaderboards) | |
for btn, fn in ( | |
(prev_day, go_back_day), | |
(next_day, go_forward_day), | |
(prev_week, go_back_week), | |
(next_week, go_forward_week) | |
): | |
btn.click(fn, inputs=leaderboard_date, outputs=leaderboard_date) | |
return app | |
if __name__ == '__main__': | |
app = create_daily_weekly_leaderboard_app(data_df) | |
app.launch() | |