Files

75 lines
2.8 KiB
Python
Raw Permalink Normal View History

2026-05-15 16:39:08 -05:00
import os
import zipfile
import database_utilities
# ========================================================================
2026-05-15 16:39:08 -05:00
def filtrar_correos_nuevos(emails):
"""
Verifica cuáles correos son nuevos (no están en la BD), los guarda en la BD
y retorna la lista completa de nuevos (con o sin adjuntos).
Todos se registran en DB para no reprocesarlos en futuras ejecuciones.
2026-05-15 16:39:08 -05:00
"""
if not emails:
return []
ids = [e['id'] for e in emails]
existentes = database_utilities.get_existing_ids(ids)
nuevos = [e for e in emails if e['id'] not in existentes]
print(f"Correos nuevos detectados: {len(nuevos)}")
if nuevos:
print("Guardando nuevos correos en la base de datos...")
database_utilities.save_emails(nuevos)
return nuevos
2026-05-15 16:39:08 -05:00
# ========================================================================
2026-05-15 16:39:08 -05:00
def descomprimir_adjuntos(archivos, ruta):
"""
Descomprime archivos .zip en la ruta especificada y actualiza la lista de archivos.
Remueve el .zip original de la lista y añade los contenidos extraídos.
"""
archivos_finales = []
for archivo in archivos:
ruta_archivo = os.path.join(ruta, archivo)
if archivo.lower().endswith('.zip') and os.path.exists(ruta_archivo):
try:
with zipfile.ZipFile(ruta_archivo, 'r') as zip_ref:
nombres_extraidos = zip_ref.namelist()
zip_ref.extractall(ruta)
archivos_finales.extend(nombres_extraidos)
except Exception as e:
print(f" ⚠️ Error descomprimiendo {archivo}: {e}")
archivos_finales.append(archivo)
else:
archivos_finales.append(archivo)
return archivos_finales
# ========================================================================
2026-05-15 16:39:08 -05:00
def filtrar_archivos_validos(archivos):
"""
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-05-15 16:39:08 -05:00
def procesar_adjuntos_email(e, archivos, ruta_descarga):
"""
Descomprime y filtra los archivos de un correo.
Retorna la lista de archivos válidos si existen, de lo contrario lista vacía.
"""
# 1. Descomprimir archivos ZIP si existen
archivos_procesados = descomprimir_adjuntos(archivos, ruta_descarga)
# 2. Filtrar solo PDF y XML
archivos_validos = filtrar_archivos_validos(archivos_procesados)
if archivos_validos:
e['archivos'] = archivos_validos
return archivos_validos
return []
# ========================================================================
2026-05-15 16:39:08 -05:00