def get_circuit_name(cid, include_flag=True): """ Gets the stylized version of the given circuit's name :param cid: Circuit ID :param include_flag: Whether to include the nationality flag in the constructor's name :return: String """ global circuits if circuits is None: circuits = load_circuits() circuit = circuits.loc[cid] name = circuit["name"] if include_flag: nat = circuit["country"].lower() if nat in NATIONALITY_TO_FLAG.index: flag_t = NATIONALITY_TO_FLAG.loc[nat, "flag"] name = flag.flagize(f":{flag_t}: " + name) else: logging.warning(f"Unknown nationality {nat}, circuit ID: {cid}") return name
def get_race_name(rid, include_flag=True, include_country=True, line_br=None, use_shortened=False, include_year=False): """ Gets the stylized version of the given race's name :param rid: Race ID :param include_flag: Whether to include the nationality flag in the constructor's name :param include_country: Whether to use the full race name or just the country name :param line_br: Character to use for line break, or None if not desired :param use_shortened: Use shortened version of GP name :param include_year: Whether to include the year in the name, only works if `use_shortened` and `line_br` are both False :return: String """ global circuits, races if circuits is None: circuits = load_circuits() if races is None: races = load_races() race = races.loc[rid] circuit = circuits.loc[race["circuitId"]] name = circuit["country"] if include_country else race["name"] if use_shortened: name = name[:3].upper() if include_flag: nat = circuit["country"].lower() if nat in NATIONALITY_TO_FLAG.index: flag_t = NATIONALITY_TO_FLAG.loc[nat, "flag"] if line_br: name = flag.flagize(f"{name} {line_br} :{flag_t}:") else: name = flag.flagize(f":{flag_t}: " + name) else: logging.warning(f"Unknown nationality {nat}, race ID: {rid}") if include_year: name = str(race["year"]) + " " + name return name
import logging from bokeh.layouts import column from bokeh.models import Div from data_loading.data_loader import load_races, load_results, load_driver_standings, load_fastest_lap_data, \ load_lap_times, load_circuits from mode import circuitdriver, driverconstructor from utils import get_circuit_name, get_driver_name, get_constructor_name, plot_image_url, generate_spacer_item, \ generate_plot_list_selector, generate_div_item, PlotItem, COMMON_PLOT_DESCRIPTIONS races = load_races() results = load_results() driver_standings = load_driver_standings() fastest_lap_data = load_fastest_lap_data() lap_times = load_lap_times() circuits = load_circuits() def get_layout(circuit_id=-1, driver_id=-1, constructor_id=-1, download_image=True, **kwargs): circuit_rids = races[races["circuitId"] == circuit_id].index.values driver_results = results[results["driverId"] == driver_id] cdc_results = driver_results[(driver_results["raceId"].isin(circuit_rids)) & (driver_results["constructorId"] == constructor_id)] logging.info(f"Generating layout for mode CIRCUITDRIVERCONSTRUCTOR in circuitdriverconstructor, " f"circuit_id={circuit_id}, driver_id={driver_id}, constructor_id={constructor_id}") # Detect invalid combos if cdc_results.shape[0] == 0: return generate_error_layout(circuit_id, driver_id, constructor_id) cdc_rids = cdc_results["raceId"]