mirror of https://github.com/tiangolo/fastapi.git
🎨 [pre-commit.ci] Auto format from pre-commit.com hooks
This commit is contained in:
parent
3c1d6ebf9f
commit
820b235528
|
|
@ -128,7 +128,7 @@ This example enhances FastAPI with structured routing and response timing, makin
|
||||||
##### 📌 API Structure
|
##### 📌 API Structure
|
||||||
- **`/healthz`**: Health check endpoint for the main router. it path name is `Global.health-check`.
|
- **`/healthz`**: Health check endpoint for the main router. it path name is `Global.health-check`.
|
||||||
- **`/model/create`**: Model creation endpoint for the model router with path name `Model.create`.
|
- **`/model/create`**: Model creation endpoint for the model router with path name `Model.create`.
|
||||||
- **`/model/{model_id}/item/create`**: Item creation endpoint for the item router and its child router of model
|
- **`/model/{model_id}/item/create`**: Item creation endpoint for the item router and its child router of model
|
||||||
router with path name `Model.Item.create`.
|
router with path name `Model.Item.create`.
|
||||||
##### 🔥 Benefits
|
##### 🔥 Benefits
|
||||||
|
|
||||||
|
|
@ -138,4 +138,4 @@ This example enhances FastAPI with structured routing and response timing, makin
|
||||||
|
|
||||||
This setup is **ideal for scalable FastAPI projects**, ensuring better organization and easier debugging.
|
This setup is **ideal for scalable FastAPI projects**, ensuring better organization and easier debugging.
|
||||||
|
|
||||||
{* ../../docs_src/custom_api_router/tutorial001.py hl[93:120,30:36] *}
|
{* ../../docs_src/custom_api_router/tutorial001.py hl[93:120,30:36] *}
|
||||||
|
|
|
||||||
|
|
@ -110,6 +110,7 @@ app = FastAPI(route_class=TimedRoute, router_class=AppRouter)
|
||||||
model = AppRouter(prefix="/model", name="Model", route_class=TimedRoute)
|
model = AppRouter(prefix="/model", name="Model", route_class=TimedRoute)
|
||||||
item = AppRouter(prefix="/{model_id}/item", name="Item", route_class=TimedRoute)
|
item = AppRouter(prefix="/{model_id}/item", name="Item", route_class=TimedRoute)
|
||||||
|
|
||||||
|
|
||||||
async def create_model(request: Request):
|
async def create_model(request: Request):
|
||||||
"""
|
"""
|
||||||
Create a model
|
Create a model
|
||||||
|
|
@ -117,12 +118,21 @@ async def create_model(request: Request):
|
||||||
print("Model created")
|
print("Model created")
|
||||||
route: TimedRoute = request.scope["route"]
|
route: TimedRoute = request.scope["route"]
|
||||||
router: AppRouter = request.scope["router"]
|
router: AppRouter = request.scope["router"]
|
||||||
return JSONResponse({"route_class": route.__class__.__name__, "route_name": route.name, "router_class": router.__class__.__name__}, status_code=200)
|
return JSONResponse(
|
||||||
|
{
|
||||||
|
"route_class": route.__class__.__name__,
|
||||||
|
"route_name": route.name,
|
||||||
|
"router_class": router.__class__.__name__,
|
||||||
|
},
|
||||||
|
status_code=200,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
model.add_api_route(
|
model.add_api_route(
|
||||||
path="/create", endpoint=create_model, methods=["POST"], name="create-model"
|
path="/create", endpoint=create_model, methods=["POST"], name="create-model"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
async def create_item(request: Request):
|
async def create_item(request: Request):
|
||||||
"""
|
"""
|
||||||
Create an item
|
Create an item
|
||||||
|
|
@ -131,8 +141,14 @@ async def create_item(request: Request):
|
||||||
route: TimedRoute = request.scope["route"]
|
route: TimedRoute = request.scope["route"]
|
||||||
router: AppRouter = request.scope["router"]
|
router: AppRouter = request.scope["router"]
|
||||||
return JSONResponse(
|
return JSONResponse(
|
||||||
{"route_class": route.__class__.__name__, "route_name": route.name, "router_class": router.__class__.__name__},
|
{
|
||||||
status_code=200)
|
"route_class": route.__class__.__name__,
|
||||||
|
"route_name": route.name,
|
||||||
|
"router_class": router.__class__.__name__,
|
||||||
|
},
|
||||||
|
status_code=200,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
item.add_api_route(
|
item.add_api_route(
|
||||||
path="/create", endpoint=create_item, methods=["POST"], name="create-item"
|
path="/create", endpoint=create_item, methods=["POST"], name="create-item"
|
||||||
|
|
|
||||||
|
|
@ -8,27 +8,35 @@ __author__ = "prakash"
|
||||||
__date__ = "12/03/25"
|
__date__ = "12/03/25"
|
||||||
|
|
||||||
from fastapi.testclient import TestClient
|
from fastapi.testclient import TestClient
|
||||||
|
|
||||||
from docs_src.custom_api_router.tutorial001 import app
|
from docs_src.custom_api_router.tutorial001 import app
|
||||||
|
|
||||||
client = TestClient(app)
|
client = TestClient(app)
|
||||||
|
|
||||||
|
|
||||||
def test_get_timed():
|
def test_get_timed():
|
||||||
response = client.get("/healthz")
|
response = client.get("/healthz")
|
||||||
assert response.text == "OK"
|
assert response.text == "OK"
|
||||||
assert "X-Response-Time" in response.headers
|
assert "X-Response-Time" in response.headers
|
||||||
assert float(response.headers["X-Response-Time"]) >= 0
|
assert float(response.headers["X-Response-Time"]) >= 0
|
||||||
|
|
||||||
|
|
||||||
def test_route_class():
|
def test_route_class():
|
||||||
response = client.post("/model/create", json={"name": "test", "description": "test"})
|
response = client.post(
|
||||||
|
"/model/create", json={"name": "test", "description": "test"}
|
||||||
|
)
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
response_json = response.json()
|
response_json = response.json()
|
||||||
assert response_json["route_name"] == "Global.Model.create-model"
|
assert response_json["route_name"] == "Global.Model.create-model"
|
||||||
assert response_json["route_class"] == "TimedRoute"
|
assert response_json["route_class"] == "TimedRoute"
|
||||||
assert response_json["router_class"] == "AppRouter"
|
assert response_json["router_class"] == "AppRouter"
|
||||||
|
|
||||||
|
|
||||||
def test_route_name():
|
def test_route_name():
|
||||||
response = client.post("/model/Model001/item/create", json={"name": "test", "description": "test"})
|
response = client.post(
|
||||||
|
"/model/Model001/item/create", json={"name": "test", "description": "test"}
|
||||||
|
)
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
response_json = response.json()
|
response_json = response.json()
|
||||||
assert response_json["route_name"] == "Global.Model.Item.create-item"
|
assert response_json["route_name"] == "Global.Model.Item.create-item"
|
||||||
assert response_json["router_class"] == "AppRouter"
|
assert response_json["router_class"] == "AppRouter"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue