New_Dhan_UI / backend /utils /data_loader.py
kishan-1721
update place-order
c1fb6b5
"""
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)