CLI tool for email processing with domain migration
Project description
Procesador de Correos - Arquitectura Hexagonal
🎯 Principios de Arquitectura
- ✅ Sin Estado: Sin estado entre peticiones
- ✅ Modular: Patrón Extraer → Transformar → Generar
- ✅ Hexagonal: Núcleo aislado de la infraestructura
- ✅ Multi-interfaz: CLI, API (Local + Lambda), Librería
- ✅ E/S Flexible: Múltiples tipos de entrada/salida
💼 Lógica de Negocio
Flujo Principal
El sistema procesa direcciones de correo electrónico extrayendo información de usuario y migrándolas a un nuevo dominio:
- Extraer: Leer correos de varias fuentes (archivo, lista, texto)
- Validar: Aplicar reglas de negocio BR-001 a BR-005
- Transformar: Aplicar reglas de transformación TR-001 a TR-005
- Generar: Producir resultados en formato CSV, JSON o en línea
Reglas de Validación (BR)
| ID | Regla | Condición | Acción si Falla |
|---|---|---|---|
| BR-001 | Exactamente un @ | email.count('@') == 1 |
Registrar y omitir |
| BR-002 | Exactamente un punto en prefijo | prefix.count('.') == 1 |
Registrar y omitir |
| BR-003 | Nombre 2-50 caracteres | 2 ≤ len(nombre) ≤ 50 |
Registrar y omitir |
| BR-004 | Apellido 2-50 caracteres | 2 ≤ len(apellido) ≤ 50 |
Registrar y omitir |
| BR-005 | Solo letras (a-z, A-Z, acentuadas) | nombre.isalpha() |
Registrar y omitir |
Nota: Todas las validaciones se ejecutan secuencialmente. Si alguna falla, el correo se registra y se omite.
Reglas de Transformación (TR)
| ID | Regla | Entrada Ejemplo | Salida Ejemplo |
|---|---|---|---|
| TR-001 | Capitalizar nombre | juan | Juan |
| TR-002 | Capitalizar apellido | perez | Perez |
| TR-003 | Minúsculas en correo | Juan.Perez@NEW.COM | juan.perez@new.com |
| TR-004 | Preservar dominio original | juan.perez@example.com | @example.com |
| TR-005 | Aplicar nuevo dominio | Juan + Perez + @new.com | juan.perez@new.com |
Nota: Las transformaciones solo se aplican a correos que pasaron todas las validaciones.
Entidad de Dominio (Email)
Propiedades:
nombre: Nombre (capitalizado)apellido: Apellido (capitalizado)correo_original: Dirección de correo originalcorreo_nuevo: Nuevo correo con dominio destino
Comportamiento:
- Capitaliza nombres automáticamente
- Convierte correos a minúsculas automáticamente
- Genera nuevo correo:
nombre.apellido@nuevo_dominio
Métricas del Proceso
| Métrica | Valor |
|---|---|
| Velocidad de procesamiento | ~0.1 seg/correo |
| Tasa de éxito | 90-95% |
| Errores de validación | 5-10% |
| Capacidad | 10,000+ correos/día (automatizado) |
🏗️ Estructura
src/features/email_processing/
├── domain/ # Lógica de Negocio Principal
│ ├── email.py # Entidad
│ └── ports.py # Interfaces
├── adapters/
│ ├── input/ # Adaptadores Primarios
│ │ ├── cli_adapter.py
│ │ ├── api_adapter.py
│ │ └── library_adapter.py
│ └── output/ # Adaptadores Secundarios
│ ├── file_adapter.py
│ ├── csv_adapter.py
│ └── json_adapter.py
└── shared/ # Validación y Logging
📦 Instalación
Desde PyPI (Recomendado)
pip install email-processor-cli
Desde Código Fuente
git clone https://github.com/yourusername/hiperautomatization.git
cd hiperautomatization
pip install -r requirements.txt
🚀 Inicio Rápido
CLI
Instalado desde PyPI:
email-processor --input-type list --input "user@old.com" --new-domain new.com --output-type inline
Desde código fuente:
python main_cli.py --input-type list --input "user@old.com" --new-domain new.com --output-type inline
API (Local)
# Iniciar servidor
python main_api.py
# Probar
python test_api.py
API (AWS Lambda)
cd terraform
build.bat # o ./build.sh
terraform apply
# Obtener API Key
terraform output api_key
Autenticación: Todas las peticiones a la API Lambda requieren el header x-api-key.
# Ejemplo con API Key
curl -X POST https://your-api.execute-api.us-east-1.amazonaws.com/transform \
-H "Content-Type: application/json" \
-H "x-api-key: prod-email-processor-2024-secure-key" \
-d '{"emails":["user@old.com"],"new_domain":"new.com"}'
Librería
from src.features.email_processing.adapters.input.library_adapter import EmailProcessingLibrary
emails = EmailProcessingLibrary.extract(['user@old.com'], 'list')
transformed = EmailProcessingLibrary.transform(emails, 'new.com')
result = EmailProcessingLibrary.generate(transformed, 'inline')
📋 Tipos de Entrada
- file: Leer desde ruta de archivo
- list: Array de correos
- text: Texto separado por líneas
📋 Tipos de Salida
- csv: Guardar en archivo CSV (predeterminado)
- json: Guardar en archivo JSON
- inline: Retornar/imprimir directamente
- silent: Procesar sin salida (solo logs)
🔐 Seguridad
Autenticación con API Key
La API Lambda usa autenticación con API Key:
- Header:
x-api-key - Clave por defecto:
prod-email-processor-2024-secure-key - Variable de entorno:
API_KEYen Lambda - Respuesta en caso de fallo:
401 Unauthorized
Obtener API Key después del despliegue:
cd terraform
terraform output api_key
Probar autenticación:
# Sin API Key (falla)
curl -X POST $API_URL/transform -d '{}'
# Respuesta: {"error": "Unauthorized: Invalid or missing API key"}
# Con API Key (éxito)
curl -X POST $API_URL/transform -H "x-api-key: YOUR_KEY" -d '{}'
📚 Ejemplos
Ver carpeta examples/ para ejemplos completos de uso:
- Ejemplos de API (local + Lambda con API Key)
- Ejemplos de librería
- Ejemplos de CLI (Windows + Linux/Mac)
🧪 Pruebas
python test_api.py
📖 Documentación
🚀 Primeros Pasos
- Guía de Inicio Rápido - Comienza a usar en 5 minutos con ejemplos prácticos
- Guía de Despliegue - Documentación completa de despliegue y uso
- Hoja de Referencia - Referencia rápida de comandos y configuraciones
- Integración n8n - Automatización de flujos con plataforma n8n
- Publicación en PyPI - Guía completa para publicar en PyPI
- PyPI Quick Start - Publicar en PyPI en 3 pasos
📋 Documentación de Procesos
docs/pdd/PDD.md - Documentación completa del proceso de negocio:
- 📄 Proceso AS-IS: Descripción del proceso manual con actores, pasos y métricas
- 📊 Reglas de Negocio: Validación (BR-001 a BR-005) y reglas de transformación (TR-001 a TR-005)
- 🤖 Análisis de Automatización: Viabilidad de automatización 100% con mapeo de tecnologías
- 🚀 Visión TO-BE: Diseño del proceso automatizado y comparación de beneficios
- ⚠️ Evaluación de Riesgos: Riesgos operacionales, de seguridad y cumplimiento con estrategias de mitigación
- 📅 Hoja de Ruta de Transición: Plan de implementación de 6 meses
📊 Diagramas de Procesos
docs/pdd/diagrams/ - Documentación visual de procesos:
| Diagrama | Descripción | Sección |
|---|---|---|
macroproceso.mmd |
Contexto organizacional (upstream/downstream) | 1.1 |
swimlanes.mmd |
Secuencia de interacción de actores | 1.1 |
alcance.mmd |
Visualización de alcance (dentro/fuera) | 1.2 |
entradas-salidas.mmd |
Flujo de datos entrada/salida | 1.3-1.4 |
flujo-detallado.mmd |
Flujo manual AS-IS detallado | 1.8 |
heatmap-automatizacion.mmd |
Mapa de calor de viabilidad de automatización | 4.2 |
proceso-tobe.mmd |
Proceso automatizado TO-BE | 5.1 |
roadmap-transicion.mmd |
Gantt de transición de 6 meses | 5.3 |
Generar Diagramas:
cd docs/pdd/diagrams
sh convert.sh
Requisitos:
npm install -g @mermaid-js/mermaid-cli
🚢 Despliegue
Ver terraform/README.md para instrucciones de despliegue en AWS.
Logs de CloudWatch
Los logs se guardan automáticamente en CloudWatch:
- Logs de Lambda:
/aws/lambda/email-processor - Logs de API Gateway:
/aws/apigateway/email-processor - Retención: 7 días
- Incluye: Request/response, errores, fallos de validación, validación de API key
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file email_processor_cli-2025.10.27.183827.tar.gz.
File metadata
- Download URL: email_processor_cli-2025.10.27.183827.tar.gz
- Upload date:
- Size: 63.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5d3946013f217f02bbd724f42ffc0e287a6682a0a130afb6a711377d25ee5895
|
|
| MD5 |
b2e40cda51c1318a788f454ac26a253f
|
|
| BLAKE2b-256 |
bb908f55b838dc82775e23856c0be9694bff0056cb89e42c2e907ce08e2693ab
|
File details
Details for the file email_processor_cli-2025.10.27.183827-py3-none-any.whl.
File metadata
- Download URL: email_processor_cli-2025.10.27.183827-py3-none-any.whl
- Upload date:
- Size: 22.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9c9b4d2005e32c270a1a9151000368966010d3caf3b256c013aa5cf4447ef0b6
|
|
| MD5 |
41a1b40e364c0cbd06f84ec6c5b74e63
|
|
| BLAKE2b-256 |
cdeb813254b00307fe6e175c9da3a0eb1f32cc864c67d387513c7257e1271b42
|