YFDashboard / src /dbt_data_client.py
Jon Solow
Completely remove previous nflverse
7df9386
raw
history blame
1.83 kB
import duckdb
import os
import pandas as pd
import subprocess
import streamlit as st
DBT_DIR = os.path.join(os.path.dirname(__file__), "dbt_yfdash")
DUCKDB_PATH = os.path.join(DBT_DIR, "dev.duckdb")
FANTASY_POSITIONS = [
"QB",
"RB",
"WR",
"TE",
"FB",
"K",
]
def get_db_conn():
return duckdb.connect(DUCKDB_PATH)
def run_dbt_build():
process = subprocess.Popen(
args=["dbt", "build"],
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
cwd=DBT_DIR,
)
stdout, _ = process.communicate()
st.text("\n".join(stdout.decode().split("\n")[1:][:-1]))
def execute_db_command_df(db_command: str):
with get_db_conn() as db_conn:
return db_conn.sql(db_command).df()
def get_current_tables() -> list[str]:
current_tables_df = execute_db_command_df("SHOW TABLES")
return current_tables_df["name"].tolist()
def get_snap_counts() -> pd.DataFrame:
df = execute_db_command_df("SELECT * from snap_counts")
df["fantasy_position"] = df["position"].isin(FANTASY_POSITIONS)
return df
def get_play_by_play() -> pd.DataFrame:
df = execute_db_command_df("SELECT * from play_by_play")
return df
def get_player_stats() -> pd.DataFrame:
df = execute_db_command_df("SELECT * from player_stats")
return df
def get_ftn_charting() -> pd.DataFrame:
df = execute_db_command_df("SELECT * from ftn_charting")
return df
def get_depth_charts() -> pd.DataFrame:
df = execute_db_command_df("SELECT * from depth_charts")
return df
def get_nextgen_stats(stat_category: str) -> pd.DataFrame:
df = execute_db_command_df(f"SELECT * from ngs_{stat_category}")
return df
def get_pbp_participation() -> pd.DataFrame:
# TODO - wire this up to actual play by play participation
return pd.DataFrame()