Browse Source

fix: include all methods in generate_unique_id to prevent duplicates

Fixes #13175. Routes with multiple methods now generate distinct operation IDs per method.

Made-with: Cursor
pull/15164/head
themavik 4 months ago
parent
commit
0cc5ba4032
  1. 10
      fastapi/openapi/utils.py

10
fastapi/openapi/utils.py

@ -1,6 +1,7 @@
import copy
import http.client
import inspect
import re
import warnings
from collections.abc import Sequence
from typing import Any, Literal, cast
@ -242,7 +243,14 @@ def get_openapi_operation_metadata(
operation["summary"] = generate_operation_summary(route=route, method=method)
if route.description:
operation["description"] = route.description
operation_id = route.operation_id or route.unique_id
if route.operation_id:
operation_id = route.operation_id
elif len(route.methods) > 1:
base_id = f"{route.name}{route.path_format}"
base_id = re.sub(r"\W", "_", base_id)
operation_id = f"{base_id}_{method.lower()}"
else:
operation_id = route.unique_id
if operation_id in operation_ids:
endpoint_name = getattr(route.endpoint, "__name__", "<unnamed_endpoint>")
message = f"Duplicate Operation ID {operation_id} for function {endpoint_name}"

Loading…
Cancel
Save