From: Sebastián Ramírez Date: Mon, 27 Jul 2026 16:17:33 +0000 (+0200) Subject: ⚡️ Avoid flattening dependencies for request parameters, mainly for OpenAPI (#16073) X-Git-Tag: 0.140.6~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cc96fd3a7cf74972b57a6439f22d858a2ae42c8f;p=thirdparty%2Ffastapi%2Ffastapi.git ⚡️ Avoid flattening dependencies for request parameters, mainly for OpenAPI (#16073) --- diff --git a/fastapi/dependencies/utils.py b/fastapi/dependencies/utils.py index 2799269397..dedb394327 100644 --- a/fastapi/dependencies/utils.py +++ b/fastapi/dependencies/utils.py @@ -242,11 +242,31 @@ def _get_flat_fields_from_params(fields: list[ModelField]) -> list[ModelField]: def get_flat_params(dependant: Dependant) -> list[ModelField]: - flat_dependant = get_flat_dependant(dependant, skip_repeats=True) - path_params = _get_flat_fields_from_params(flat_dependant.path_params) - query_params = _get_flat_fields_from_params(flat_dependant.query_params) - header_params = _get_flat_fields_from_params(flat_dependant.header_params) - cookie_params = _get_flat_fields_from_params(flat_dependant.cookie_params) + path_params: list[ModelField] = [] + query_params: list[ModelField] = [] + header_params: list[ModelField] = [] + cookie_params: list[ModelField] = [] + visited: list[DependencyCacheKey] = [] + uses_scopes_cache: _UsesScopesCache = {} + dependants = [dependant] + while dependants: + current_dependant = dependants.pop() + cache_key = _get_cache_key( + dependant=current_dependant, + uses_scopes_cache=uses_scopes_cache, + ) + if cache_key in visited: + continue + visited.append(cache_key) + path_params.extend(current_dependant.path_params) + query_params.extend(current_dependant.query_params) + header_params.extend(current_dependant.header_params) + cookie_params.extend(current_dependant.cookie_params) + dependants.extend(reversed(current_dependant.dependencies)) + path_params = _get_flat_fields_from_params(path_params) + query_params = _get_flat_fields_from_params(query_params) + header_params = _get_flat_fields_from_params(header_params) + cookie_params = _get_flat_fields_from_params(cookie_params) return path_params + query_params + header_params + cookie_params