from domain.teams import NFLTeam, ALL_TEAMS from queries.footballguys.helpers import parse_snaps, parse_targets, parse_redzone from typing import List, Callable, Optional import pandas as pd def add_team_name_columns(team_df: pd.DataFrame, team_short_name: str, team_name: str): team_df.insert(0, "TEAM", team_short_name) team_df.insert(1, "TEAM_NAME", team_name) def apply_intended_column_sorting(df: pd.DataFrame, first_columns: List[str]) -> pd.DataFrame: first_columns_in_df = [col for col in first_columns if col in df.columns] remaining_columns = [col for col in df.columns if col not in first_columns_in_df] return df[first_columns_in_df + remaining_columns] def get_all_teams_stat_type( all_teams_list: List[NFLTeam], parsing_function: Callable, store_key: str, intended_first_columns: Optional[List[str]] = None, ): team_df_list = [] for team in all_teams_list: team_df = parsing_function(team.footballguys_short_name) add_team_name_columns(team_df, team.team_short_name, team.team_name) team_df_list.append(team_df) df = pd.concat(team_df_list) if intended_first_columns: df = apply_intended_column_sorting(df, intended_first_columns) print(f"footballguy {store_key} loaded") return df def request_stat(stat_name: str) -> pd.DataFrame: intended_col_sort = None if stat_name == "targets": parse_fxn = parse_targets intended_col_sort = ["TEAM", "TEAM_NAME", "POS", "name", "total"] elif stat_name == "snap-counts": parse_fxn = parse_snaps elif stat_name == "redzone": parse_fxn = parse_redzone intended_col_sort = ["TEAM", "TEAM_NAME", "POS", "name", "total"] return get_all_teams_stat_type(ALL_TEAMS, parse_fxn, stat_name, intended_col_sort)