# tools.py import os import csv import json import base64 from dotenv import load_dotenv from datetime import datetime try: import gspread from google.oauth2.service_account import Credentials GOOGLE_SHEETS_AVAILABLE = True except ImportError: GOOGLE_SHEETS_AVAILABLE = False CSV_FILE = "user_interest.csv" SHEET_NAME = "UserInterest" def _get_google_credentials(): """ Loads Google credentials either from local file or HF Spaces secret. Returns a ServiceAccountCredentials object. """ load_dotenv(override=True) scope = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"] google_creds_json = os.getenv("GOOGLE_CREDENTIALS_JSON") if google_creds_json: json_str = base64.b64decode(google_creds_json).decode('utf-8') creds_dict = json.loads(json_str) creds = Credentials.from_service_account_info(creds_dict, scopes=scope) print("[info] Loaded Google credentials from environment.") return creds raise RuntimeError("Google credentials not found.") def _save_to_google_sheets(email, name, notes): creds = _get_google_credentials() client = gspread.authorize(creds) sheet = client.open(SHEET_NAME).sheet1 row = [datetime.today().strftime('%Y-%m-%d %H:%M'), email, name, notes] sheet.append_row(row) print(f"[Google Sheets] Recorded: {email}, {name}") def _save_to_csv(email, name, notes): file_exists = os.path.isfile(CSV_FILE) with open(CSV_FILE, mode='a', newline='', encoding='utf-8') as f: writer = csv.writer(f) if not file_exists: writer.writerow(["Timestamp", "Email", "Name", "Notes"]) writer.writerow([datetime.today().strftime('%Y-%m-%d %H:%M'), email, name, notes]) print(f"[CSV] Recorded: {email}, {name}") def _record_user_details(email, name="Name not provided", notes="Not provided"): try: if GOOGLE_SHEETS_AVAILABLE: _save_to_google_sheets(email, name, notes) else: raise ImportError("gspread not installed.") except Exception as e: print(f"[Warning] Google Sheets write failed, using CSV. Reason: {e}") _save_to_csv(email, name, notes) return {"recorded": "ok"}