Files
dashboard-leads/PRUEBAS_EXPORT/export_cartera_junta.py
2026-08-18 11:48:08 -05:00

108 lines
3.4 KiB
Python

# 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()