Skip to content
Advertisement

FastAPI – How to get app instance inside a router?

I want to get the app instance in my router file, what should I do ?

My main.py is as follows:

# ...
app = FastAPI()
app.machine_learning_model = joblib.load(some_path)
app.include_router(some_router)
# ...

Now I want to use app.machine_learning_model in some_router’s file , what should I do ?

Advertisement

Answer

You should store the model on the app instance using the generic app.state attribute, as described in the documentation (see State class implementation too):

app.state.ml_model = joblib.load(some_path)

As for accessing the app instance (and subsequently, the model) from outside the main fileā€”as per the documentation, where a request is available (i.e., endpoints and middleware), the app is available on request.app. Example:

from fastapi import Request

@router.get("/some_route")
def some_router_function(request: Request):
    model = request.app.state.ml_model
User contributions licensed under: CC BY-SA
9 People found this is helpful
Advertisement