🐛 Fix OpenAPI security scheme definitions

This commit is contained in:
Sebastián Ramírez 2025-12-04 13:49:37 +01:00
parent 65a775d6f7
commit 115b072570
1 changed files with 11 additions and 2 deletions

View File

@ -79,7 +79,8 @@ def get_openapi_security_definitions(
flat_dependant: Dependant, flat_dependant: Dependant,
) -> Tuple[Dict[str, Any], List[Dict[str, Any]]]: ) -> Tuple[Dict[str, Any], List[Dict[str, Any]]]:
security_definitions = {} security_definitions = {}
operation_security = [] # Use a dict to merge scopes for same security scheme
operation_security_dict: Dict[str, List[str]] = {}
for security_requirement in flat_dependant.security_requirements: for security_requirement in flat_dependant.security_requirements:
security_definition = jsonable_encoder( security_definition = jsonable_encoder(
security_requirement.security_scheme.model, security_requirement.security_scheme.model,
@ -88,7 +89,15 @@ def get_openapi_security_definitions(
) )
security_name = security_requirement.security_scheme.scheme_name security_name = security_requirement.security_scheme.scheme_name
security_definitions[security_name] = security_definition security_definitions[security_name] = security_definition
operation_security.append({security_name: security_requirement.scopes}) # Merge scopes for the same security scheme
if security_name not in operation_security_dict:
operation_security_dict[security_name] = []
for scope in security_requirement.scopes or []:
if scope not in operation_security_dict[security_name]:
operation_security_dict[security_name].append(scope)
operation_security = [
{name: scopes} for name, scopes in operation_security_dict.items()
]
return security_definitions, operation_security return security_definitions, operation_security