Ir al contenido

Directorios y caché de arranque

Usa el registro de rutas para que un servicio no dependa del directorio actual del proceso. Directory ofrece nombres de métodos para ese mismo registro. La compilación guarda metadatos de arranque: no compila Python ni reemplaza la gestión de despliegues. compile(...) devuelve None; debe llamarse en una instrucción independiente antes de create().

Usar los directorios configurados de la aplicación

Sección titulada «Usar los directorios configurados de la aplicación»

Este fragmento de manejador recibe por inyección la aplicación existente. Devuelve el directorio configurado de vistas, sin construir otra aplicación ni depender del directorio actual del proceso.

from pathlib import Path
from orionis.foundation.contracts.application import IApplication
from orionis.foundation.directory import Directory
async def views_directory(app: IApplication) -> Path:
directory = Directory(app)
return directory.resourcesViews()

El resultado predeterminado es <proyecto>/resources/views. También puedes usar directamente app.path("resources_views"). Tras crear la aplicación, las rutas nombradas son absolutas; una clave desconocida devuelve None.

Clave de rutaDirectorio predeterminadoCódigo de aplicación
app_http_controllersapp/http/controllersManejadores de solicitudes.
app_modelsapp/modelsModelos ORM.
app_providersapp/providersRegistro de servicios.
resources_viewsresources/viewsPlantillas Jinja.
database_migrationsdatabase/migrationsCambios del esquema.
storage_logsstorage/logsArchivos de logs.
teststestsPruebas de aplicación.
import base64
from pathlib import Path
from tempfile import TemporaryDirectory
from orionis import Application
from orionis.environment import Env
class CachedApplication(Application):
pass
key = "base64:" + base64.b64encode(b"c" * 32).decode()
Env.set("APP_KEY", key, only_os=True)
try:
with TemporaryDirectory() as directory:
root = Path(directory)
(root / "config").mkdir()
(root / ".env").touch()
app = CachedApplication(root)
app.compile("bootstrap/cache", ["config", ".env"])
app.withConfigApp(key=key)
app.create()
assert app.compiled
assert app.compiledPath == (root / "bootstrap/cache").resolve()
assert (root / "config").resolve() in app.compiledInvalidationPathsDirs
assert (root / ".env").resolve() in app.compiledInvalidationPathsFiles
print("compiled cache configured")
finally:
Env.unset("APP_KEY", only_os=True)

Actualizar la caché de arranque después de un cambio

Sección titulada «Actualizar la caché de arranque después de un cambio»

El esqueleto configura app.compile(...) en bootstrap/app.py antes de create(). Los archivos y directorios vigilados determinan la invalidación automática. Si cambias registros de arranque o una ruta que no está vigilada, limpia los artefactos anteriores desde la raíz del proyecto y reinicia los procesos en ejecución:

Ventana de terminal
uv run python -B reactor optimize:clear

optimize:clear elimina los archivos de caché compilada de configuración, comandos y rutas, bytecode de Python y artefactos de los directorios build/dist del proyecto. Revisa esos efectos si allí almacenas archivos del despliegue. Es una operación distinta de borrar valores de caché de negocio. El siguiente proceso reconstruye los metadatos de arranque que necesite.

reactor optimize valida en memoria la sintaxis del código Python; no precarga la caché de arranque ni ejecuta las pruebas de tu aplicación. Cuando se reutiliza una caché válida, también se reutilizan los registros anteriores: editar llamadas with... no produce efecto hasta invalidarla.

directory.py · core_paths.py · application.py

Volver al índice del módulo.