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 [] ########################################################