Initial commit - dashboard leads
This commit is contained in:
107
PRUEBAS_EXPORT/export_cartera_junta.py
Normal file
107
PRUEBAS_EXPORT/export_cartera_junta.py
Normal file
@@ -0,0 +1,107 @@
|
||||
# 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()
|
||||
Reference in New Issue
Block a user