from shiny import module, ui, render, reactive, event, App import fastf1 as ff1 import numpy as np # UI @module.ui def plot1_ui(): return ui.ouput_plot("gear_1") # Server @module.server def plot1_server(): @reactive.Calc # Get required data for driver 1 based on selection def get_data_1(): try: ui.notification_show("Data takes a couple seconds to load.", duration=3, type = 'default') f1_session = ff1.get_session(int(input.year()), input.track_select(), input.session_type()) f1_session.load() # Check if user input == fastest driver if input.driver1_select() == "Fastest driver": lap = f1_session.laps.pick_fastest() else: laps_driver = f1_session.laps.pick_driver(input.driver1_select()) lap = laps_driver.pick_fastest() tel = lap.get_telemetry() driver = lap['Driver'] #converting data to numpy data tables x = np.array(tel['X'].values) y = np.array(tel['Y'].values) points = np.array([x, y]).T.reshape(-1, 1, 2) segments = np.concatenate([points[:-1], points[1:]], axis=1) gear = tel['nGear'].to_numpy().astype(float) lap_time = lap['LapTime'] return segments, gear, driver, lap_time except Exception: ui.notification_show("Data not available. Select another track or driver.", duration=10, type = 'error')