Componentes del Framework¶
BeaPro está organizado en módulos enfocados, cada uno responsable de un aspecto específico del ciclo de vida de la automatización.
bot.py: Orquestador Principal¶
El punto de entrada de la automatización. Coordina el flujo de ejecución completo:
- Llama a
initialize()para configurar el entorno - Itera sobre los elementos de la fuente de datos
- Llama a
process_item(item)para cada elemento - Maneja excepciones automáticamente
- Llama a
finalize()para limpiar y reportar resultados
Por lo general, no necesitas modificar bot.py: tu lógica de automatización va en framework/process.py.
/process.py: Lógica de Automatización¶
Aquí es donde agregas tus pasos de automatización.
La función process_item(item) se llama una vez por elemento en tu fuente de datos. Accede a los campos del elemento usando claves de diccionario:
def process_item(item):
name = item['name']
email = item['email']
# ... tus pasos de automatización aquí
/state.py: Gestión de Estado¶
Gestiona el estado de ejecución compartido entre todos los módulos:
- Contadores de éxito y error
- Elemento siendo procesado actualmente
- Instancias del bot (
WebBot,DesktopBot) - Verificación de interrupción
- Cálculo del estado de la tarea (
SUCCESS,FAILED,PARTIALLY_COMPLETED)
El objeto STATE se importa donde sea necesario el estado compartido.
/exceptions.py: Tipos de Excepción¶
Define tres tipos de excepción personalizados que controlan cómo el bucle de ejecución responde a los errores:
| Excepción | Cuándo Usar | Comportamiento |
|---|---|---|
BusinessException |
Errores de validación, datos inválidos, fallos esperados | Registra el error, continúa con el siguiente elemento |
SystemException |
Fallos técnicos, bloqueos de la aplicación | Registra el error, reinicia la inicialización, continúa |
InterruptException |
Solicitud de interrupción del Orchestrator | Registra una advertencia, detiene la ejecución elegantemente |
from framework.exceptions import BusinessException, SystemException
if not item.get('email'):
raise BusinessException("Correo electrónico no encontrado")
if not app_is_running():
raise SystemException("La aplicación objetivo no responde")
/datasources.py: Fuentes de Datos¶
Proporciona dos clases de fuentes de datos listas para usar y una clase base para implementaciones personalizadas.
CSVSource¶
Lee elementos de un archivo CSV, devolviendo cada fila como un diccionario con los encabezados de columna como claves.
- Genera un CSV de resultado con columnas
STATUS,MESSAGEyTIMESTAMP - Reporta éxito y fallo por elemento automáticamente
DatapoolSource¶
Obtiene elementos de un Datapool de BotCity en el Orchestrator.
- Reporta el estado del elemento de vuelta al Orchestrator automáticamente
- Soporta el ciclo de vida completo del Datapool
Fuentes de Datos Personalizadas¶
Extiende BaseSource e implementa __iter__, __next__, report_success y report_error para conectarte a cualquier base de datos, API o sistema externo.
/initialize.py: Inicialización¶
Configura el entorno de automatización al inicio de cada ejecución y después de un reinicio provocado por una SystemException:
- Crea las carpetas
output/ytemp/ - Configura el registro de logs
- Inicializa
WebBotoDesktopBot - Abre la aplicación objetivo y realiza los pasos de inicio de sesión necesarios
Personaliza init_webbot() para configurar el navegador:
/finalize.py: Finalización¶
Se ejecuta al final de cada ejecución para cerrar elegantemente:
- Cierra navegadores y aplicaciones abiertas
- Sube los archivos de resultado (logs, CSVs, capturas de pantalla) al BotCity Orchestrator
- Envía el reporte final de estado de la tarea (
SUCCESS,FAILEDoPARTIALLY_COMPLETED)
/status_handling.py: Manejadores de Excepciones¶
Contiene los manejadores invocados por bot.py cuando ocurre cada tipo de excepción:
- Registra errores con contexto completo
- Envía alertas al BotCity Orchestrator (
ERRORpara fallos,WARNpara interrupciones) - Captura pantallas en caso de errores y las guarda en
temp/ - Reporta éxito o fallo de vuelta a la fuente de datos
Personaliza estos manejadores para agregar notificaciones por correo electrónico, actualizaciones en bases de datos externas, lógica de reintento o alertas específicas del negocio.
/logger.py: Registro de Logs¶
Configura salida de log dual para cada ejecución:
- Logs en archivo: Escritos en
output/Log_BotCity_task-{task_id}_date-{timestamp}.log - Logs del Orchestrator: Transmitidos en tiempo real al Log de Ejecución del BotCity Orchestrator
Las entradas de log incluyen marcas de tiempo, nombres de módulos y funciones para facilitar el rastreo y la depuración.
Archivos de Salida¶
Todos los archivos de salida se escriben en la carpeta output/ y se cargan automáticamente al BotCity Orchestrator como Archivos de Resultado al final de la ejecución.
| Archivo | Descripción |
|---|---|
Log_BotCity_task-{id}_date-{ts}.log |
Log completo de ejecución con marcas de tiempo |
CSV_BotCity_task-{id}_date-{ts}.csv |
Datos originales más columnas STATUS, MESSAGE y TIMESTAMP si se usa un CSV |
temp/*.png |
Capturas de pantalla tomadas automáticamente en excepciones |