diff --git a/skyvern/forge/api_app.py b/skyvern/forge/api_app.py index 68593be6..3d96ae28 100644 --- a/skyvern/forge/api_app.py +++ b/skyvern/forge/api_app.py @@ -55,7 +55,19 @@ def custom_openapi() -> dict: async def lifespan(_: FastAPI) -> AsyncGenerator[None, Any]: """Lifespan context manager for FastAPI app startup and shutdown.""" LOG.info("Server started") + if forge_app.api_app_startup_event: + LOG.info("Calling api app startup event") + try: + await forge_app.api_app_startup_event() + except Exception: + LOG.exception("Failed to execute api app startup event") yield + if forge_app.api_app_shutdown_event: + LOG.info("Calling api app shutdown event") + try: + await forge_app.api_app_shutdown_event() + except Exception: + LOG.exception("Failed to execute api app shutdown event") LOG.info("Server shutting down") diff --git a/skyvern/forge/app.py b/skyvern/forge/app.py index 33d22283..e801afc7 100644 --- a/skyvern/forge/app.py +++ b/skyvern/forge/app.py @@ -127,6 +127,8 @@ scrape_exclude: ScrapeExcludeFunc | None = None authentication_function: Callable[[str], Awaitable[Organization]] | None = None authenticate_user_function: Callable[[str], Awaitable[str | None]] | None = None setup_api_app: Callable[[FastAPI], None] | None = None +api_app_startup_event: Callable[[], Awaitable[None]] | None = None +api_app_shutdown_event: Callable[[], Awaitable[None]] | None = None agent = ForgeAgent()