79 lines
2.9 KiB
Python
79 lines
2.9 KiB
Python
import os
|
|
import zipfile
|
|
import database_utilities
|
|
|
|
########################################################
|
|
def quitar_correos_ya_registrados_en_base_de_datos(emails):
|
|
"""
|
|
Verifica cuáles correos son nuevos (no están en la BD), los guarda
|
|
y retorna la lista filtrada de los que tienen adjuntos.
|
|
"""
|
|
if not emails:
|
|
return []
|
|
|
|
# 1. Verificar cuáles ya existen en la BD
|
|
ids = [e['id'] for e in emails]
|
|
existentes = database_utilities.get_existing_ids(ids)
|
|
|
|
# Solo nos quedamos con los que NO están en la BD
|
|
correos_no_registrados = [e for e in emails if e['id'] not in existentes]
|
|
print(f"Correos nuevos detectados: {len(correos_no_registrados)}")
|
|
|
|
if correos_no_registrados:
|
|
print("Guardando nuevos correos en la base de datos...")
|
|
database_utilities.save_emails(correos_no_registrados)
|
|
|
|
return correos_no_registrados
|
|
|
|
########################################################
|
|
def descomprimir_adjuntos(emails, ruta):
|
|
"""
|
|
Esta funcion recibe la lista de emails y por cada no recorre sus adjuntos
|
|
si encuentra un adjunto .zip lo descomprime en la ruta especificada
|
|
y actualiza la lista de archivos agregar estos nuevos documentos al lsitado de adjuntos del email
|
|
"""
|
|
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
|
|
|
|
########################################################
|
|
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)]
|
|
|
|
########################################################
|
|
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 []
|
|
|
|
########################################################
|
|
|