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
Blueprintenapp.py. - Detectar automáticamente
web_bp.pydentro 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.pyen 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
bpdentro de cada archivoweb_bp.py. - Registra el
Blueprinten 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.pycuando 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.