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() | |