streaming-visualization / gsheet_loader.py
mbecchis's picture
Upload 5 files
8848efa verified
raw
history blame
1.62 kB
import time
import gspread
from google.oauth2.service_account import Credentials
import pandas as pd
import streamlit as st
SCOPES = ["https://www.googleapis.com/auth/spreadsheets.readonly"]
sheet_id = "10nGgqXxunGXo_GI1LxybvsAr1TYSDdNiqqZX6DSTbDA"
key_path = "service_account_credentials.json"
headers = ['Catalog', 'Mapping status', 'Priority', 'Program kinds', 'Customers', 'Size', 'Size Aprox', 'Needed by', 'Recommendations', 'Scraping?','Custom provider deeplinks', "Scraping link"]
def load_gsheet(tab_name: str) -> pd.DataFrame:
creds = Credentials.from_service_account_file(key_path, scopes=SCOPES)
client = gspread.authorize(creds)
w = client.open_by_key(sheet_id)
for attempt in range(3): # retry loop
try:
ws = w.worksheet(tab_name)
if tab_name == "Catalog Status":
df = pd.DataFrame(ws.get_all_records(expected_headers=headers))
else:
df= pd.DataFrame(ws.get_all_records())
return df
except gspread.exceptions.APIError as e:
if attempt < 2:
st.warning(f"Retrying Google API for {tab_name}... ({attempt+1}/3)")
time.sleep(2) # avoid hammering API
else:
st.error(f"Failed to load '{tab_name}': {e}")
raise e
def get_data():
onboarding = load_gsheet("Catalog Onboarding")
time.sleep(1)
metadata = load_gsheet("NEW Catalog Data levels")
time.sleep(1)
mapping = load_gsheet("Catalog Status")
return onboarding, metadata, mapping