""" Data loading utilities for CSV and Google Sheets """ import pandas as pd from functools import lru_cache from backend.config import SHEET_CSV_URL @lru_cache(maxsize=2) def load_script_data(path: str) -> pd.DataFrame: """ Load script master data from CSV file with caching Args: path: Path to CSV file Returns: DataFrame with script data """ df = pd.read_csv(path) df.dropna(how='all', axis=1, inplace=True) return df @lru_cache(maxsize=2) def load_detailed_script_data(path: str) -> pd.DataFrame: """ Load detailed script master data from CSV file with caching Args: path: Path to CSV file Returns: DataFrame with detailed script data """ try: df = pd.read_csv(path) # Ensure required columns exist or clean up validation if needed return df except Exception as e: print(f"Error loading detailed script data: {e}") return pd.DataFrame() def load_clients_from_sheet(url: str = SHEET_CSV_URL) -> pd.DataFrame: """ Load client details from Google Sheets Args: url: Google Sheets CSV export URL Returns: DataFrame with client details """ try: df = pd.read_csv(url) return df except Exception as e: print(f"Error loading clients from sheet: {e}") return pd.DataFrame() def safe_json_to_df(response, columns: list) -> pd.DataFrame: """ Convert requests.Response json to DataFrame with fallback to empty frame Args: response: requests.Response object columns: List of column names for fallback empty DataFrame Returns: DataFrame with response data or empty DataFrame """ if response is None: return pd.DataFrame(columns=columns) if response.status_code != 200: return pd.DataFrame(columns=columns) text = response.text.strip() if not text or text == "[]": return pd.DataFrame(columns=columns) try: return pd.DataFrame(response.json()) except Exception: return pd.DataFrame(columns=columns)