2026-06-01 16:31:24 -05:00
|
|
|
import os
|
|
|
|
|
import zipfile
|
|
|
|
|
|
2026-07-09 09:48:30 -05:00
|
|
|
# ============================================================================
|
|
|
|
|
def descomprimir_adjuntos(emails: list[dict], ruta: str) -> list[dict]:
|
2026-06-01 16:31:24 -05:00
|
|
|
"""
|
2026-06-01 18:05:44 -05:00
|
|
|
Busca adjuntos ZIP, los descomprime y agrega los archivos
|
|
|
|
|
extraídos a la lista de adjuntos del correo.
|
2026-06-01 16:31:24 -05:00
|
|
|
"""
|
|
|
|
|
|
2026-06-01 18:05:44 -05:00
|
|
|
try:
|
|
|
|
|
for email in emails:
|
|
|
|
|
nuevos_adjuntos = []
|
|
|
|
|
for adjunto in list(email["adjuntos"]):
|
|
|
|
|
if not adjunto.lower().endswith(".zip"):
|
|
|
|
|
continue
|
|
|
|
|
ruta_zip = os.path.join(ruta, adjunto)
|
|
|
|
|
if not os.path.exists(ruta_zip):
|
|
|
|
|
print(f"⚠️ No existe: {ruta_zip}")
|
|
|
|
|
continue
|
|
|
|
|
try:
|
|
|
|
|
with zipfile.ZipFile(ruta_zip, "r") as zip_ref:
|
|
|
|
|
nombres_extraidos = [
|
|
|
|
|
nombre
|
|
|
|
|
for nombre in zip_ref.namelist()
|
|
|
|
|
if not nombre.endswith("/")
|
|
|
|
|
]
|
|
|
|
|
zip_ref.extractall(ruta)
|
|
|
|
|
nuevos_adjuntos.extend(nombres_extraidos)
|
|
|
|
|
print(
|
|
|
|
|
f"📦 {adjunto}: {len(nombres_extraidos)} archivos extraídos"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
print(f"⚠️ Error descomprimiendo {adjunto}: {e}")
|
|
|
|
|
email["adjuntos"].extend(nuevos_adjuntos)
|
|
|
|
|
return emails
|
|
|
|
|
except Exception as ex:
|
|
|
|
|
print(f"❌ Error general: {ex}")
|
|
|
|
|
return emails
|
|
|
|
|
|
2026-07-09 09:48:30 -05:00
|
|
|
# ============================================================================
|
|
|
|
|
def filtrar_archivos_validos(archivos: list[str]) -> list[str]:
|
2026-06-01 16:31:24 -05:00
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
Retorna una lista solo con archivos .pdf y .xml (ignora mayúsculas/minúsculas).
|
|
|
|
|
"""
|
|
|
|
|
extensiones_validas = ('.pdf', '.xml')
|
|
|
|
|
return [a for a in archivos if a.lower().endswith(extensiones_validas)]
|
|
|
|
|
|
2026-07-09 09:48:30 -05:00
|
|
|
# ============================================================================
|
2026-06-01 16:31:24 -05:00
|
|
|
|