diff --git a/projects/fal/src/fal/app.py b/projects/fal/src/fal/app.py index 411cf286..ba7d5782 100644 --- a/projects/fal/src/fal/app.py +++ b/projects/fal/src/fal/app.py @@ -3,6 +3,7 @@ import inspect import os import fal.api +from contextlib import asynccontextmanager from fal.toolkit import mainify from fastapi import FastAPI from typing import Any, NamedTuple, Callable, TypeVar, ClassVar @@ -72,14 +73,21 @@ def serve(self) -> None: import uvicorn app = self._build_app() - self.setup() uvicorn.run(app, host="0.0.0.0", port=8080) def _build_app(self) -> FastAPI: from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware - _app = FastAPI() + @asynccontextmanager + async def lifespan(app: FastAPI): + self.setup() + try: + yield + finally: + self.teardown() + + _app = FastAPI(lifespan=lifespan) _app.add_middleware( CORSMiddleware, @@ -145,6 +153,9 @@ def order_schema_object(schema: dict[str, Any]): return spec + def teardown(self): + """Teardown the application after serving.""" + @mainify def endpoint(path: str) -> Callable[[EndpointT], EndpointT]: