mirror of
https://github.com/langflow-ai/langflow.git
synced 2026-07-23 23:13:58 +08:00
FastAPI 0.137 made `include_router` lazy: included sub-routers are stored as `_IncludedRouter` wrappers (no `.path`) in `app.routes` instead of being flattened. `opentelemetry-instrumentation-fastapi` names spans by walking `app.routes` and reading `route.path`; its `Match.FULL` branch already guards a missing `.path`, but the `Match.PARTIAL` branch does not. A partial match -- e.g. an OPTIONS/CORS preflight against a GET-only route -- raised `AttributeError: '_IncludedRouter' object has no attribute 'path'` mid-request and turned into a 500 (surfaced by test_security_cors.py::TestCORSIntegration). `instrument_app` hard-codes the span-detail callback and exposes no override hook, so patch the module-level `_get_route_details` (resolved as a global on every call) with a guarded copy that falls back to the include prefix, then the request path, when the matched route has no `.path`. Applied in `create_app` before `FastAPIInstrumentor.instrument_app`; idempotent and a no-op on FastAPI <=0.136. Follow-on to #13710 (same lazy-include root cause, different consumer).