Files
dashboard-leads/backend/diag_excel_arequipa.py
2026-08-18 11:48:08 -05:00

43 lines
2.2 KiB
Python

"""
Diagnostico: baja el Excel de Arequipa de SharePoint y muestra que hojas
y que tablas nombradas detecta openpyxl, y cuantas filas tiene cada una.
Asi sabemos por que el sync cae al fallback (10000 filas).
"""
import os, io, openpyxl, requests, msal
CLIENT_ID = os.environ["MS_CLIENT_ID"]
TENANT_ID = os.environ["MS_TENANT_ID"]
REFRESH_TOKEN = os.environ["MS_REFRESH_TOKEN"]
SHAREPOINT_SITE = "escuelarefrigeracion.sharepoint.com"
SITE_PATH = "/sites/ASESORASCOMERCIALES"
SUBFOLDER = "2. BASE PROSPECTOS/BASE GENERAL"
SCOPES = ["Sites.Read.All", "Files.Read.All"]
ARCHIVOS = ["Base Sede Arequipa.xlsx", "Base Diana Chavez.xlsx"] # uno malo + uno bueno para comparar
app = msal.PublicClientApplication(CLIENT_ID, authority=f"https://login.microsoftonline.com/{TENANT_ID}")
tok = app.acquire_token_by_refresh_token(REFRESH_TOKEN, scopes=SCOPES)["access_token"]
h = {"Authorization": f"Bearer {tok}"}
sid = requests.get(f"https://graph.microsoft.com/v1.0/sites/{SHAREPOINT_SITE}:{SITE_PATH}", headers=h).json()["id"]
drives = requests.get(f"https://graph.microsoft.com/v1.0/sites/{sid}/drives", headers=h).json()["value"]
did = next((d["id"] for d in drives if "document" in d["name"].lower() or "compartid" in d["name"].lower()), drives[0]["id"])
items = requests.get(f"https://graph.microsoft.com/v1.0/drives/{did}/root:/{SUBFOLDER}:/children", headers=h).json()["value"]
for nombre in ARCHIVOS:
it = next((x for x in items if x["name"] == nombre), None)
print("\n" + "="*60)
if not it:
print(f"❌ NO ENCONTRADO en SharePoint: '{nombre}'")
print(" Archivos disponibles:", [x["name"] for x in items if x["name"].endswith(".xlsx")])
continue
print(f"📄 {nombre}")
cont = requests.get(f"https://graph.microsoft.com/v1.0/drives/{did}/items/{it['id']}/content", headers=h).content
wb = openpyxl.load_workbook(io.BytesIO(cont), data_only=True)
for ws in wb.worksheets:
print(f" Hoja: '{ws.title}' dims={ws.dimensions} max_row={ws.max_row}")
tbls = list(ws.tables.keys())
print(f" Tablas nombradas: {tbls}")
for tn, tb in ws.tables.items():
print(f" · {tn} -> ref={tb.ref}")