fix: fastapi 0.137 router.route changes
Some checks are pending
ci / ruff (push) Successful in 3s
ci / ty (push) Successful in 4s
ci / tests (push) Successful in 16s
ci / build (push) Waiting to run

This commit is contained in:
Chris Milne 2026-06-22 15:15:31 +01:00
parent ee47186c5a
commit 4b3ab92d2a
2 changed files with 24 additions and 18 deletions

View file

@ -2,7 +2,7 @@ import pytest
from typing import AsyncGenerator
from itertools import combinations
from fastapi.routing import APIRoute
from fastapi.routing import APIRoute, iter_route_contexts
from httpx import AsyncClient, ASGITransport
from sqlalchemy.orm import sessionmaker
@ -258,12 +258,13 @@ def generate_body_and_status(params: dict[str, str]) -> list[tuple[dict, int]]:
def get_testable_routes():
routes = []
for route in app.routes:
if not isinstance(route, APIRoute):
continue
contexts = list(iter_route_contexts(app.routes))
for route in contexts:
if not route.methods:
continue
if not isinstance(route.route, APIRoute):
continue
for method in route.methods:
if method in {"HEAD", "OPTIONS"}:
continue
@ -271,10 +272,10 @@ def get_testable_routes():
routes.append(
(
method,
route.path,
route.status_code,
route.response_model,
route.summary,
route.route.path,
route.route.status_code,
route.route.response_model,
route.route.summary,
)
)
@ -287,6 +288,6 @@ def get_testable_routes():
#
#
### Docstring formatted output ###
# with open("endpoints.txt", "w") as f:
# for ep in get_testable_routes():
# f.write(f"- [{ep[0]}]({ep[1]}): []: {ep[4]}\n")
with open("endpoints.txt", "w") as f:
for ep in get_testable_routes():
f.write(f"- [{ep[0]}]({ep[1]}): []: {ep[4]}\n")

View file

@ -5,7 +5,7 @@
import pytest
from httpx import AsyncClient
from fastapi.routing import APIRoute
from fastapi.routing import APIRoute, iter_route_contexts
from .conftest import generate_query_and_status
@ -180,10 +180,15 @@ async def test_get_self_orgs_dynamic(default_client: AsyncClient):
resp = await default_client.get(path)
contexts = list(iter_route_contexts(default_client._transport.app.routes)) # ty:ignore[unresolved-attribute]
route = next(
route
for route in default_client._transport.app.routes # ty:ignore[unresolved-attribute]
if isinstance(route, APIRoute) and path in route.path and method in route.methods
route.route
for route in contexts
if isinstance(route.route, APIRoute)
and path in route.route.path
and isinstance(route.methods, set)
and method in route.methods
)
assert resp.status_code == route.status_code