WalkXR-AI / data_sources / sheets_loader.py
sheets_loader.py
Raw
import gspread
from schemas.simulation_case import SimulationCase
from typing import List
from google.oauth2.service_account import Credentials

SCOPES = ['https://www.googleapis.com/auth/spreadsheets.readonly']
KEYFILE_PATH = 'secrets/walkai-datapipeline-162431057be9.json'

def load_scenarios_from_sheet(sheet_url: str, tab_name: str = 'All Output') -> List[SimulationCase]:
    creds = Credentials.from_service_account_file(KEYFILE_PATH, scopes=SCOPES)
    client = gspread.authorize(creds)

    sheet = client.open_by_url(sheet_url)
    worksheet = sheet.worksheet(tab_name)
    rows = worksheet.get_all_records()

    cases = []
    for i, row in enumerate(rows):
        try:
            case = SimulationCase(
                persona_id=row["Persona ID"],
                module_id=row["Module ID"],
                prompt=row["Module Prompt"],
                emotion_before=row["Emotion Before"],
                desired_ai=row.get("Was AI Desired", ""),
                ai_behavior=row.get("Suggested AI Behavior", ""),
                tone=row.get("AI Tone", "")
            )
            cases.append(case)
        except Exception as e:
            print(f"[ERROR] Row {i+2} failed to validate: {e}")
            continue

    return cases