Files
descarga_adjuntos_correos_cpe/file_manager.py
T

133 lines
4.7 KiB
Python

import os
import shutil
# ========================================================================
def tiene_datos_parciales(m):
"""True si el archivo tiene al menos un campo útil, aunque incompleto."""
if m['ruc'] not in ("N/A", "Desconocido"):
return True
if m['serie_numero'] not in ("No encontrado", "N/A"):
return True
if m['tipo'] != "99":
return True
return False
# ========================================================================
def renombrar_archivos_por_metadata(metadatos, ruta_base):
"""
Renombra cada archivo según su propia metadata extraída.
- XML/PDF con archivo_propuesto válido: se renombra a {archivo_propuesto}{extension}
- CDR (tipo 'CDR'): se renombra igual (archivo_propuesto ya incluye CDR)
- Sin metadata válida (archivo_propuesto is None): se deja intacto (será eliminado al limpiar)
Retorna la lista de metadatos actualizada con los nombres finales.
"""
for m in metadatos:
nombre_original = m['archivo']
extension = m['extension']
propuesto = m.get('archivo_propuesto')
if propuesto is None:
continue
nuevo_nombre = f"{propuesto}{extension}"
if nuevo_nombre == nombre_original:
continue
ruta_old = os.path.join(ruta_base, nombre_original)
ruta_new = os.path.join(ruta_base, nuevo_nombre)
try:
if os.path.exists(ruta_old):
if os.path.exists(ruta_new) and ruta_old != ruta_new:
os.remove(ruta_new)
shutil.move(ruta_old, ruta_new)
m['archivo'] = nuevo_nombre
except Exception as e:
print(f" ⚠️ Error renombrando '{nombre_original}': {e}")
return metadatos
# ========================================================================
def mover_validos_a_resultado(metadatos, ruta_origen, ruta_destino):
"""
Mueve solo los archivos que tienen metadata válida (archivo_propuesto no None)
desde la carpeta de descarga a la carpeta de resultados.
"""
if not os.path.exists(ruta_destino):
os.makedirs(ruta_destino)
movidos = 0
for m in metadatos:
if m.get('archivo_propuesto') is None:
continue
archivo = m['archivo']
ruta_old = os.path.join(ruta_origen, archivo)
ruta_new = os.path.join(ruta_destino, archivo)
try:
if os.path.exists(ruta_old):
if os.path.exists(ruta_new) and ruta_old != ruta_new:
os.remove(ruta_new)
shutil.move(ruta_old, ruta_new)
movidos += 1
except Exception as e:
print(f" ⚠️ Error trasladando '{archivo}' a resultado: {e}")
if movidos:
print(f" 📦 {movidos} archivo(s) movido(s) a resultado.")
# ========================================================================
def mover_a_evaluar(metadatos, ruta_origen, ruta_evaluar):
"""
Mueve archivos con metadata parcial a la carpeta evaluar/ para revisión.
Conserva el nombre original del archivo (sin renombrar).
"""
if not metadatos:
return
if not os.path.exists(ruta_evaluar):
os.makedirs(ruta_evaluar)
movidos = 0
for m in metadatos:
archivo = m['archivo']
ruta_old = os.path.join(ruta_origen, archivo)
ruta_new = os.path.join(ruta_evaluar, archivo)
try:
if os.path.exists(ruta_old):
if os.path.exists(ruta_new) and ruta_old != ruta_new:
os.remove(ruta_new)
shutil.move(ruta_old, ruta_new)
movidos += 1
except Exception as e:
print(f" ⚠️ Error moviendo '{archivo}' a evaluar: {e}")
if movidos:
print(f" 🔍 {movidos} archivo(s) movido(s) a evaluar (metadata parcial).")
# ========================================================================
def limpiar_carpeta_descarga(ruta):
"""
Elimina todos los archivos y subcarpetas dentro de la carpeta de descarga.
Omite la subcarpeta 'evaluar/' para no borrar archivos pendientes de revisión.
"""
if not os.path.exists(ruta):
return
print(f" 🧹 Limpiando carpeta de descarga")
for archivo in os.listdir(ruta):
if archivo == "evaluar":
continue
ruta_archivo = os.path.join(ruta, archivo)
try:
if os.path.isfile(ruta_archivo):
os.remove(ruta_archivo)
elif os.path.isdir(ruta_archivo):
shutil.rmtree(ruta_archivo)
except Exception as e:
print(f" ⚠️ No se pudo eliminar '{archivo}': {e}")
# ========================================================================