108 lines
3.4 KiB
Python
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()
|