From f6467ce58da1b4895c4ec83633d867b0c2e9e08b Mon Sep 17 00:00:00 2001 From: Pravin Kamble Date: Sun, 25 Jan 2026 21:22:07 +0530 Subject: [PATCH] migrate startup/shutdown events to lifespan API --- docs_src/app_testing/tutorial003_py39.py | 12 ++++++++---- docs_src/body/tutorial001_py310.py | 9 ++++++++- docs_src/body/tutorial001_py39.py | 8 +++++++- docs_src/body/tutorial002_py310.py | 9 ++++++++- docs_src/body/tutorial002_py39.py | 9 ++++++++- docs_src/events/tutorial001_py39.py | 12 ++++++++---- docs_src/events/tutorial002_py39.py | 12 ++++++++---- docs_src/security/tutorial001_an_py39.py | 9 ++++++++- docs_src/security/tutorial002_an_py310.py | 9 ++++++++- docs_src/security/tutorial002_py310.py | 10 +++++++++- docs_src/security/tutorial002_py39.py | 9 ++++++++- docs_src/sql_databases/tutorial001_an_py310.py | 11 +++++++---- docs_src/sql_databases/tutorial001_an_py39.py | 11 +++++++---- docs_src/sql_databases/tutorial001_py310.py | 11 +++++++---- docs_src/sql_databases/tutorial001_py39.py | 10 ++++++---- docs_src/sql_databases/tutorial002_an_py310.py | 10 +++++++--- docs_src/sql_databases/tutorial002_an_py39.py | 10 +++++++--- docs_src/sql_databases/tutorial002_py310.py | 11 +++++++---- docs_src/sql_databases/tutorial002_py39.py | 10 ++++++---- 19 files changed, 142 insertions(+), 50 deletions(-) diff --git a/docs_src/app_testing/tutorial003_py39.py b/docs_src/app_testing/tutorial003_py39.py index ca6b45ce0..d5a0791bd 100644 --- a/docs_src/app_testing/tutorial003_py39.py +++ b/docs_src/app_testing/tutorial003_py39.py @@ -1,15 +1,19 @@ +from contextlib import asynccontextmanager + from fastapi import FastAPI from fastapi.testclient import TestClient -app = FastAPI() - items = {} -@app.on_event("startup") -async def startup_event(): +@asynccontextmanager +async def lifespan(app): items["foo"] = {"name": "Fighters"} items["bar"] = {"name": "Tenders"} + yield + + +app = FastAPI(lifespan=lifespan) @app.get("/items/{item_id}") diff --git a/docs_src/body/tutorial001_py310.py b/docs_src/body/tutorial001_py310.py index b71a52b62..2b92095f8 100644 --- a/docs_src/body/tutorial001_py310.py +++ b/docs_src/body/tutorial001_py310.py @@ -1,3 +1,5 @@ +from contextlib import asynccontextmanager + from fastapi import FastAPI from pydantic import BaseModel @@ -9,7 +11,12 @@ class Item(BaseModel): tax: float | None = None -app = FastAPI() +@asynccontextmanager +async def lifespan(app): + yield + + +app = FastAPI(lifespan=lifespan) @app.post("/items/") diff --git a/docs_src/body/tutorial001_py39.py b/docs_src/body/tutorial001_py39.py index f93317274..04a9c6eff 100644 --- a/docs_src/body/tutorial001_py39.py +++ b/docs_src/body/tutorial001_py39.py @@ -1,3 +1,4 @@ +from contextlib import asynccontextmanager from typing import Union from fastapi import FastAPI @@ -11,7 +12,12 @@ class Item(BaseModel): tax: Union[float, None] = None -app = FastAPI() +@asynccontextmanager +async def lifespan(app): + yield + + +app = FastAPI(lifespan=lifespan) @app.post("/items/") diff --git a/docs_src/body/tutorial002_py310.py b/docs_src/body/tutorial002_py310.py index a829a4dc9..2a3761841 100644 --- a/docs_src/body/tutorial002_py310.py +++ b/docs_src/body/tutorial002_py310.py @@ -1,3 +1,5 @@ +from contextlib import asynccontextmanager + from fastapi import FastAPI from pydantic import BaseModel @@ -9,7 +11,12 @@ class Item(BaseModel): tax: float | None = None -app = FastAPI() +@asynccontextmanager +async def lifespan(app: FastAPI): + yield + + +app = FastAPI(lifespan=lifespan) @app.post("/items/") diff --git a/docs_src/body/tutorial002_py39.py b/docs_src/body/tutorial002_py39.py index fb212e8e7..4e646a78d 100644 --- a/docs_src/body/tutorial002_py39.py +++ b/docs_src/body/tutorial002_py39.py @@ -1,3 +1,5 @@ +from collections.abc import AsyncGenerator +from contextlib import asynccontextmanager from typing import Union from fastapi import FastAPI @@ -11,7 +13,12 @@ class Item(BaseModel): tax: Union[float, None] = None -app = FastAPI() +@asynccontextmanager +async def lifespan(app: FastAPI) -> AsyncGenerator[None, None]: + yield + + +app = FastAPI(lifespan=lifespan) @app.post("/items/") diff --git a/docs_src/events/tutorial001_py39.py b/docs_src/events/tutorial001_py39.py index 128004c9f..f317f093f 100644 --- a/docs_src/events/tutorial001_py39.py +++ b/docs_src/events/tutorial001_py39.py @@ -1,14 +1,18 @@ -from fastapi import FastAPI +from contextlib import asynccontextmanager -app = FastAPI() +from fastapi import FastAPI items = {} -@app.on_event("startup") -async def startup_event(): +@asynccontextmanager +async def lifespan(app): items["foo"] = {"name": "Fighters"} items["bar"] = {"name": "Tenders"} + yield + + +app = FastAPI(lifespan=lifespan) @app.get("/items/{item_id}") diff --git a/docs_src/events/tutorial002_py39.py b/docs_src/events/tutorial002_py39.py index a71fea802..7ab7d042c 100644 --- a/docs_src/events/tutorial002_py39.py +++ b/docs_src/events/tutorial002_py39.py @@ -1,14 +1,18 @@ -from fastapi import FastAPI +from contextlib import asynccontextmanager -app = FastAPI() +from fastapi import FastAPI -@app.on_event("shutdown") -def shutdown_event(): +@asynccontextmanager +async def lifespan(app): + yield with open("log.txt", mode="a") as log: log.write("Application shutdown") +app = FastAPI(lifespan=lifespan) + + @app.get("/items/") async def read_items(): return [{"name": "Foo"}] diff --git a/docs_src/security/tutorial001_an_py39.py b/docs_src/security/tutorial001_an_py39.py index de110402e..3fe739a24 100644 --- a/docs_src/security/tutorial001_an_py39.py +++ b/docs_src/security/tutorial001_an_py39.py @@ -1,9 +1,16 @@ +from contextlib import asynccontextmanager from typing import Annotated from fastapi import Depends, FastAPI from fastapi.security import OAuth2PasswordBearer -app = FastAPI() + +@asynccontextmanager +async def lifespan(app): + yield + + +app = FastAPI(lifespan=lifespan) oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token") diff --git a/docs_src/security/tutorial002_an_py310.py b/docs_src/security/tutorial002_an_py310.py index c7b761e45..92bc90366 100644 --- a/docs_src/security/tutorial002_an_py310.py +++ b/docs_src/security/tutorial002_an_py310.py @@ -1,10 +1,17 @@ +from contextlib import asynccontextmanager from typing import Annotated from fastapi import Depends, FastAPI from fastapi.security import OAuth2PasswordBearer from pydantic import BaseModel -app = FastAPI() + +@asynccontextmanager +async def lifespan(app): + yield + + +app = FastAPI(lifespan=lifespan) oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token") diff --git a/docs_src/security/tutorial002_py310.py b/docs_src/security/tutorial002_py310.py index 3c2018f54..af6168235 100644 --- a/docs_src/security/tutorial002_py310.py +++ b/docs_src/security/tutorial002_py310.py @@ -1,8 +1,16 @@ +from contextlib import asynccontextmanager + from fastapi import Depends, FastAPI from fastapi.security import OAuth2PasswordBearer from pydantic import BaseModel -app = FastAPI() + +@asynccontextmanager +async def lifespan(app): + yield + + +app = FastAPI(lifespan=lifespan) oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token") diff --git a/docs_src/security/tutorial002_py39.py b/docs_src/security/tutorial002_py39.py index bfd035221..36165e519 100644 --- a/docs_src/security/tutorial002_py39.py +++ b/docs_src/security/tutorial002_py39.py @@ -1,10 +1,17 @@ +from contextlib import asynccontextmanager from typing import Union from fastapi import Depends, FastAPI from fastapi.security import OAuth2PasswordBearer from pydantic import BaseModel -app = FastAPI() + +@asynccontextmanager +async def lifespan(app): + yield + + +app = FastAPI(lifespan=lifespan) oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token") diff --git a/docs_src/sql_databases/tutorial001_an_py310.py b/docs_src/sql_databases/tutorial001_an_py310.py index de1fb81fa..6007ada64 100644 --- a/docs_src/sql_databases/tutorial001_an_py310.py +++ b/docs_src/sql_databases/tutorial001_an_py310.py @@ -1,3 +1,4 @@ +from contextlib import asynccontextmanager from typing import Annotated from fastapi import Depends, FastAPI, HTTPException, Query @@ -29,12 +30,14 @@ def get_session(): SessionDep = Annotated[Session, Depends(get_session)] -app = FastAPI() - -@app.on_event("startup") -def on_startup(): +@asynccontextmanager +async def lifespan(app): create_db_and_tables() + yield + + +app = FastAPI(lifespan=lifespan) @app.post("/heroes/") diff --git a/docs_src/sql_databases/tutorial001_an_py39.py b/docs_src/sql_databases/tutorial001_an_py39.py index 595892746..b690ee74b 100644 --- a/docs_src/sql_databases/tutorial001_an_py39.py +++ b/docs_src/sql_databases/tutorial001_an_py39.py @@ -1,3 +1,4 @@ +from contextlib import asynccontextmanager from typing import Annotated, Union from fastapi import Depends, FastAPI, HTTPException, Query @@ -29,12 +30,14 @@ def get_session(): SessionDep = Annotated[Session, Depends(get_session)] -app = FastAPI() - -@app.on_event("startup") -def on_startup(): +@asynccontextmanager +async def lifespan(app): create_db_and_tables() + yield + + +app = FastAPI(lifespan=lifespan) @app.post("/heroes/") diff --git a/docs_src/sql_databases/tutorial001_py310.py b/docs_src/sql_databases/tutorial001_py310.py index b58462e6a..9e950cffa 100644 --- a/docs_src/sql_databases/tutorial001_py310.py +++ b/docs_src/sql_databases/tutorial001_py310.py @@ -1,3 +1,5 @@ +from contextlib import asynccontextmanager + from fastapi import Depends, FastAPI, HTTPException, Query from sqlmodel import Field, Session, SQLModel, create_engine, select @@ -25,12 +27,13 @@ def get_session(): yield session -app = FastAPI() +@asynccontextmanager +async def lifespan(app): + create_db_and_tables() + yield -@app.on_event("startup") -def on_startup(): - create_db_and_tables() +app = FastAPI(lifespan=lifespan) @app.post("/heroes/") diff --git a/docs_src/sql_databases/tutorial001_py39.py b/docs_src/sql_databases/tutorial001_py39.py index 410a52d0c..672c6bf52 100644 --- a/docs_src/sql_databases/tutorial001_py39.py +++ b/docs_src/sql_databases/tutorial001_py39.py @@ -1,3 +1,4 @@ +from contextlib import asynccontextmanager from typing import Union from fastapi import Depends, FastAPI, HTTPException, Query @@ -27,12 +28,13 @@ def get_session(): yield session -app = FastAPI() +@asynccontextmanager +async def lifespan(app): + create_db_and_tables() + yield -@app.on_event("startup") -def on_startup(): - create_db_and_tables() +app = FastAPI(lifespan=lifespan) @app.post("/heroes/") diff --git a/docs_src/sql_databases/tutorial002_an_py310.py b/docs_src/sql_databases/tutorial002_an_py310.py index 64c554b8a..72f0cb8ec 100644 --- a/docs_src/sql_databases/tutorial002_an_py310.py +++ b/docs_src/sql_databases/tutorial002_an_py310.py @@ -1,3 +1,4 @@ +from contextlib import asynccontextmanager from typing import Annotated from fastapi import Depends, FastAPI, HTTPException, Query @@ -45,12 +46,15 @@ def get_session(): SessionDep = Annotated[Session, Depends(get_session)] -app = FastAPI() -@app.on_event("startup") -def on_startup(): +@asynccontextmanager +async def lifespan(app): create_db_and_tables() + yield + + +app = FastAPI(lifespan=lifespan) @app.post("/heroes/", response_model=HeroPublic) diff --git a/docs_src/sql_databases/tutorial002_an_py39.py b/docs_src/sql_databases/tutorial002_an_py39.py index a8a0721ff..2fc5ad7d8 100644 --- a/docs_src/sql_databases/tutorial002_an_py39.py +++ b/docs_src/sql_databases/tutorial002_an_py39.py @@ -1,3 +1,4 @@ +from contextlib import asynccontextmanager from typing import Annotated, Union from fastapi import Depends, FastAPI, HTTPException, Query @@ -45,12 +46,15 @@ def get_session(): SessionDep = Annotated[Session, Depends(get_session)] -app = FastAPI() -@app.on_event("startup") -def on_startup(): +@asynccontextmanager +async def lifespan(app): create_db_and_tables() + yield + + +app = FastAPI(lifespan=lifespan) @app.post("/heroes/", response_model=HeroPublic) diff --git a/docs_src/sql_databases/tutorial002_py310.py b/docs_src/sql_databases/tutorial002_py310.py index ec3d68db5..5e2e7cd82 100644 --- a/docs_src/sql_databases/tutorial002_py310.py +++ b/docs_src/sql_databases/tutorial002_py310.py @@ -1,3 +1,5 @@ +from contextlib import asynccontextmanager + from fastapi import Depends, FastAPI, HTTPException, Query from sqlmodel import Field, Session, SQLModel, create_engine, select @@ -42,12 +44,13 @@ def get_session(): yield session -app = FastAPI() +@asynccontextmanager +async def lifespan(app): + create_db_and_tables() + yield -@app.on_event("startup") -def on_startup(): - create_db_and_tables() +app = FastAPI(lifespan=lifespan) @app.post("/heroes/", response_model=HeroPublic) diff --git a/docs_src/sql_databases/tutorial002_py39.py b/docs_src/sql_databases/tutorial002_py39.py index d8f5dd090..acc99ae0a 100644 --- a/docs_src/sql_databases/tutorial002_py39.py +++ b/docs_src/sql_databases/tutorial002_py39.py @@ -1,3 +1,4 @@ +from contextlib import asynccontextmanager from typing import Union from fastapi import Depends, FastAPI, HTTPException, Query @@ -44,12 +45,13 @@ def get_session(): yield session -app = FastAPI() +@asynccontextmanager +async def lifespan(app): + create_db_and_tables() + yield -@app.on_event("startup") -def on_startup(): - create_db_and_tables() +app = FastAPI(lifespan=lifespan) @app.post("/heroes/", response_model=HeroPublic)