File size: 2,167 Bytes
123bf24
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c1fb6b5
123bf24
 
 
c1fb6b5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
123bf24
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
"""
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)