Files
descarga_factura_transporte/email_utilities.py
T
GeorgeandClaude Sonnet 5.5 79378a70e1 se migran los print de los módulos a logging con nivel explícito
pipeline_utils.log pasa a usar logging (parámetro severity) y los print de
pipeline, sapb1_manager, hana_manager, outlook_utilities, email_utilities y
main pasan a logger.info/warning/error, de modo que LOG_LEVEL filtre por
severidad. El texto del log no cambia. Se mantienen los print de CLI en
sunat_schema (__main__), tools/ y tests/.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-20 22:03:38 -05:00

56 lines
2.1 KiB
Python

import logging
import os
import zipfile
logger = logging.getLogger(__name__)
# ============================================================================
def descomprimir_adjuntos(emails: list[dict], ruta: str) -> list[dict]:
"""
Busca adjuntos ZIP, los descomprime y agrega los archivos
extraídos a la lista de adjuntos del correo.
"""
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):
logger.warning(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)
logger.info(
f"📦 {adjunto}: {len(nombres_extraidos)} archivos extraídos"
)
except Exception as e:
logger.warning(f"⚠️ Error descomprimiendo {adjunto}: {e}")
email["adjuntos"].extend(nuevos_adjuntos)
return emails
except Exception as ex:
logger.error(f"❌ Error general: {ex}")
return emails
# ============================================================================
def filtrar_archivos_validos(archivos: list[str]) -> list[str]:
"""
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)]
# ============================================================================