# PRUEBAS_EXPORT/export_cartera_junta.py """ Script de PRUEBA e independiente del dashboard. Exporta la tabla cartera_junta de Supabase a un Excel para revisarla. Autodetecta en cuál proyecto Supabase vive la tabla, probando las credenciales que ya tienes configuradas (en el .env de esta carpeta y en el .env del backend). Lee TODAS las filas paginando (Supabase devuelve máx. 1000 por consulta). Uso: py -3.12 export_cartera_junta.py """ import os from dotenv import load_dotenv _AQUI = os.path.dirname(__file__) # Carga el .env de esta carpeta y también el del backend (para reutilizar credenciales) load_dotenv(os.path.join(_AQUI, ".env")) load_dotenv(os.path.join(_AQUI, "..", "backend", ".env")) PAGINA = 1000 TABLA = os.getenv("CARTERA_TABLA", "cartera_junta") def _valida(url): """Descarta URLs vacías o de plantilla (XXXX).""" if not url: return False u = url.strip().lower() return u.startswith("http") and "xxxx" not in u def _candidatos(): """Pares (nombre, url, key) a probar, en orden de prioridad.""" pares = [ ("CARTERA", os.getenv("CARTERA_URL"), os.getenv("CARTERA_KEY")), ("SUPABASE", os.getenv("SUPABASE_URL"), os.getenv("SUPABASE_KEY")), ("SUPABASE_PAUTA", os.getenv("SUPABASE_PAUTA_URL"),os.getenv("SUPABASE_PAUTA_KEY")), ] vistos, out = set(), [] for nombre, url, key in pares: if _valida(url) and key and (url, key) not in vistos: vistos.add((url, key)) out.append((nombre, url.strip(), key.strip())) return out def main(): from supabase import create_client candidatos = _candidatos() if not candidatos: print("❌ No hay credenciales válidas. Pon CARTERA_URL/CARTERA_KEY en el .env de esta carpeta.") return # Buscar en qué proyecto existe la tabla sb = None for nombre, url, key in candidatos: try: cli = create_client(url, key) cli.table(TABLA).select("*").limit(1).execute() # prueba sb = cli print(f"✅ Tabla '{TABLA}' encontrada en el proyecto: {nombre} ({url})") break except Exception as e: print(f" · {nombre}: no sirvió ({str(e)[:80]})") if sb is None: print(f"\n❌ No encontré la tabla '{TABLA}' en ninguno de tus proyectos Supabase.") print(" Copia CARTERA_URL y CARTERA_KEY (secrets de GitHub) al .env de esta carpeta.") return # Traer TODAS las filas paginando de a 1000 filas = [] inicio = 0 while True: res = sb.table(TABLA).select("*").range(inicio, inicio + PAGINA - 1).execute() lote = res.data or [] if not lote: break filas.extend(lote) print(f" leídas {len(filas)} filas...") if len(lote) < PAGINA: break inicio += PAGINA if not filas: print(f"⚠️ La tabla '{TABLA}' está vacía.") return columnas = list(filas[0].keys()) import openpyxl wb = openpyxl.Workbook() ws = wb.active ws.title = "cartera_junta" ws.append(columnas) for r in filas: ws.append([r.get(c, "") for c in columnas]) salida = os.path.join(_AQUI, "cartera_junta.xlsx") wb.save(salida) print(f"\n✅ Exportado: {salida}") print(f" Filas: {len(filas)} | Columnas: {', '.join(columnas)}") if __name__ == "__main__": main()