From 3d687c6e19a7c302ca7ec8e581a4e54c6c935740 Mon Sep 17 00:00:00 2001 From: dajiaohuang Date: Sat, 20 Jun 2026 03:26:16 +0800 Subject: [PATCH] fix: skip non-APIRoute entries when building version routes Starlette >=1.3.1 adds _IncludedRouter to app.routes which don't have .endpoint attribute. Filter them out with isinstance(). Fixes #78 --- fastapi_versioning/versioning.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/fastapi_versioning/versioning.py b/fastapi_versioning/versioning.py index 0f282d2..1711758 100644 --- a/fastapi_versioning/versioning.py +++ b/fastapi_versioning/versioning.py @@ -40,8 +40,10 @@ def VersionedFastAPI( version_route_mapping: Dict[Tuple[int, int], List[APIRoute]] = defaultdict( list ) + # Filter out non-APIRoute entries (e.g. _IncludedRouter from Starlette >=1.3.1) + api_routes = [r for r in app.routes if isinstance(r, APIRoute)] version_routes = [ - version_to_route(route, default_version) for route in app.routes + version_to_route(route, default_version) for route in api_routes ] for version, route in version_routes: