Spaces:
Sleeping
Sleeping
| 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 | |