File size: 2,477 Bytes
d3fa801
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
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()