Documentación de milpa¶
milpa es un microframework de Python 3.14 para construir monolitos modulares, inspirado en la ergonomía de Laravel y la disciplina de capas de Spring. Junta FastAPI (HTTP), Celery (tareas/crons), SQLAlchemy 2.0 (datos) y Typer (consola) detrás de una estructura opinada y un kernel reutilizable.
Esta documentación está pensada para leerse en orden, como la de Laravel: empieza por "Primeros pasos", luego "Conceptos de arquitectura", y profundiza por tema.
Filosofía en una línea: el kernel (
milpa/Core) es el framework; lo tuyo vive enapp/Modules,app/Models,app/Dictionariesyapp/Resources. Tú escribes features; el framework descubre y conecta solo.
Primeros pasos¶
- Introducción — qué es milpa y su filosofía.
- Instalación —
uvo pip, drivers de BD. - Configuración —
.envy la claseSettings. - Estructura de directorios — qué hay y dónde.
Conceptos de arquitectura¶
- Ciclo de vida de la petición —
create_app, lifespan, middlewares, locale. - Monolito modular — Core vs Modules, auto-discovery, fronteras.
Lo básico¶
- Rutas y controladores — FastAPI por módulo, auto-montaje.
- Consola (
jornal) — comandos, grupos, crear los tuyos. - Vistas — Jinja2, namespacing,
view().
Profundizando¶
- Correo —
Mailable,Mailer, drivers, adjuntos, encolado. - Colas y tareas — Celery, broker-agnóstico,
queue work. - Programación de tareas (cron) —
@cron_task,schedule run/work. - Localización (i18n) —
t(), locale ambiente, monolingüe vs i18n. - Logging — Loguru, JSON, niveles.
- Autenticación — validar tokens OAuth2 de Laravel Passport.
Base de datos¶
- Configuración del motor — engine agnóstico,
DATABASE_URL, zona horaria. - Modelos — SQLAlchemy, auto-discovery, mixins (timestamps, soft delete).
- Repositorios y transacciones —
Repository[Model, Id],@transactional.
Mapa mental Laravel → milpa¶
| Laravel | milpa |
|---|---|
artisan |
jornal |
php artisan serve |
jornal serve |
php artisan queue:work |
jornal queue work |
php artisan schedule:run |
jornal schedule run |
$schedule->command(...)->everyFiveMinutes() |
@cron_task(schedule=every_five_minutes()) |
Mail::to(...)->send(new X) |
Mail.send(X(...), to=[...]) |
Mailable |
Mailable (ABC con build()) |
| Eloquent Model | modelo SQLAlchemy (app/Models) |
$table->timestamps() |
TimestampMixin |
SoftDeletes |
SoftDeleteMixin |
| Repository / Service | Repository[Model, Id] / service @transactional |
__('key') |
t("key") |
config() / .env |
settings / .env |
| Service Provider auto-discovery | auto-discovery por convención (Registry) |