From 5f036d6319c97198ed413256b8a0a971d658a657 Mon Sep 17 00:00:00 2001 From: Ads2024 Date: Tue, 30 Dec 2025 23:26:26 +1100 Subject: [PATCH] refactored - replaced deprecated on_event with lifespan in SQL tutorials --- docs_src/sql_databases/tutorial001_an_py310.py | 15 ++++++++------- docs_src/sql_databases/tutorial001_an_py39.py | 14 ++++++++------ docs_src/sql_databases/tutorial001_py310.py | 11 +++++++---- docs_src/sql_databases/tutorial001_py39.py | 12 +++++++----- .../test_sql_databases/test_tutorial001.py | 5 ++--- 5 files changed, 32 insertions(+), 25 deletions(-) diff --git a/docs_src/sql_databases/tutorial001_an_py310.py b/docs_src/sql_databases/tutorial001_an_py310.py index de1fb81fa..8a8ee8b10 100644 --- a/docs_src/sql_databases/tutorial001_an_py310.py +++ b/docs_src/sql_databases/tutorial001_an_py310.py @@ -1,5 +1,5 @@ from typing import Annotated - +from contextlib import asynccontextmanager from fastapi import Depends, FastAPI, HTTPException, Query from sqlmodel import Field, Session, SQLModel, create_engine, select @@ -27,14 +27,15 @@ def get_session(): yield session -SessionDep = Annotated[Session, Depends(get_session)] - -app = FastAPI() +@asynccontextmanager +async def lifespan(app: FastAPI): + create_db_and_tables() + yield + # will leave this as is for now +SessionDep = Annotated[Session, Depends(get_session)] -@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_an_py39.py b/docs_src/sql_databases/tutorial001_an_py39.py index 595892746..62252b182 100644 --- a/docs_src/sql_databases/tutorial001_an_py39.py +++ b/docs_src/sql_databases/tutorial001_an_py39.py @@ -1,5 +1,5 @@ from typing import Annotated, Union - +from contextlib import asynccontextmanager from fastapi import Depends, FastAPI, HTTPException, Query from sqlmodel import Field, Session, SQLModel, create_engine, select @@ -27,14 +27,16 @@ def get_session(): yield session -SessionDep = Annotated[Session, Depends(get_session)] +@asynccontextmanager +async def lifespan(app: FastAPI): + create_db_and_tables() + yield + # will leave this as is for now -app = FastAPI() +SessionDep = Annotated[Session, Depends(get_session)] -@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_py310.py b/docs_src/sql_databases/tutorial001_py310.py index b58462e6a..76f23ad82 100644 --- a/docs_src/sql_databases/tutorial001_py310.py +++ b/docs_src/sql_databases/tutorial001_py310.py @@ -1,5 +1,6 @@ from fastapi import Depends, FastAPI, HTTPException, Query from sqlmodel import Field, Session, SQLModel, create_engine, select +from contextlib import asynccontextmanager class Hero(SQLModel, table=True): @@ -25,12 +26,14 @@ def get_session(): yield session -app = FastAPI() +@asynccontextmanager +async def lifespan(app: FastAPI): + create_db_and_tables() + yield + # will leave this as is for now -@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..b23187a8b 100644 --- a/docs_src/sql_databases/tutorial001_py39.py +++ b/docs_src/sql_databases/tutorial001_py39.py @@ -1,5 +1,5 @@ from typing import Union - +from contextlib import asynccontextmanager from fastapi import Depends, FastAPI, HTTPException, Query from sqlmodel import Field, Session, SQLModel, create_engine, select @@ -26,13 +26,15 @@ def get_session(): with Session(engine) as session: yield session +@asynccontextmanager +async def lifespan(app: FastAPI): + create_db_and_tables() + yield + # will leave this as is for now -app = FastAPI() +app = FastAPI(lifespan=lifespan) -@app.on_event("startup") -def on_startup(): - create_db_and_tables() @app.post("/heroes/") diff --git a/tests/test_tutorial/test_sql_databases/test_tutorial001.py b/tests/test_tutorial/test_sql_databases/test_tutorial001.py index 2c628f525..f5b567397 100644 --- a/tests/test_tutorial/test_sql_databases/test_tutorial001.py +++ b/tests/test_tutorial/test_sql_databases/test_tutorial001.py @@ -30,8 +30,7 @@ def clear_sqlmodel(): ) def get_client(request: pytest.FixtureRequest): clear_sqlmodel() - # TODO: remove when updating SQL tutorial to use new lifespan API - with warnings.catch_warnings(record=True): + with warnings.catch_warnings(): warnings.simplefilter("always") mod = importlib.import_module(f"docs_src.sql_databases.{request.param}") clear_sqlmodel() @@ -50,7 +49,7 @@ def get_client(request: pytest.FixtureRequest): def test_crud_app(client: TestClient): # TODO: this warns that SQLModel.from_orm is deprecated in Pydantic v1, refactor # this if using obj.model_validate becomes independent of Pydantic v2 - with warnings.catch_warnings(record=True): + with warnings.catch_warnings(): warnings.simplefilter("always") # No heroes before creating response = client.get("heroes/")