Saltar a contenido

Autoregistro de Blueprints

El sistema incluye un autoregistro automático de Blueprints para que cada vez que se cree un submódulo bajo modules/, sus rutas se expongan sin necesidad de editar manualmente create_app.


Objetivo

  • Evitar registrar manualmente cada Blueprint en app.py.
  • Detectar automáticamente web_bp.py dentro de cada submódulo.
  • Escalar sin fricción cuando se agreguen nuevos módulos.

Ubicación

core/auto_blueprints.py

Funciones principales

_find_submodule_pkg_names

  • Escanea la carpeta modules/.
  • Busca archivos interface/web/web_bp.py en cada submódulo.
  • Devuelve la lista de paquetes Python que deben importarse.

autoregister_submodule_blueprints(app, modules_root)

  • Importa dinámicamente los módulos encontrados.
  • Busca el objeto bp dentro de cada archivo web_bp.py.
  • Registra el Blueprint en la aplicación Flask.

Diagrama de flujo

flowchart TD
    A[Inicio Flask App] --> B[autoregister_submodule_blueprints]
    B --> C[Escanea modules/*/*/interface/web/web_bp.py]
    C --> D[Importa cada paquete encontrado]
    D --> E{Contiene bp?}
    E -->|Sí| F[Registrar Blueprint en app]
    E -->|No| G[Ignorar módulo]
    F --> H[Blueprint disponible en rutas]

Ejemplo de uso

En create_app:

from core.auto_blueprints import autoregister_submodule_blueprints

def create_app():
    app = Flask(__name__)
    # ...
    count = autoregister_submodule_blueprints(app, os.path.join(BASE_DIR, "modules"))
    app.logger.info("Auto-registrados %s blueprints de submódulos", count)
    return app

Convenciones

  • Cada submódulo debe tener:
    modules/<domain>/<submodule>/interface/web/web_bp.py
    
  • Dentro de web_bp.py, debe exportar un objeto:
    from flask import Blueprint
    
    bp = Blueprint("crm_cm_web", __name__, url_prefix="/customer_relationship/customer_management")
    
  • No se necesita modificar app.py cuando se agrega un nuevo módulo.

Ventajas

  • Productividad: menos pasos al agregar módulos.
  • Escalabilidad: funciona con decenas de submódulos.
  • Mantenibilidad: registro centralizado en core.