blob: b1950fa0befaa0525506ecb4a3d4347369617082 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
from __future__ import annotations
import re
from typing import TYPE_CHECKING
from litestar.types.internal_types import PathParameterDefinition
if TYPE_CHECKING:
from litestar.handlers.http_handlers import HTTPRouteHandler
from litestar.types import Method
__all__ = ("default_operation_id_creator", "SEPARATORS_CLEANUP_PATTERN")
SEPARATORS_CLEANUP_PATTERN = re.compile(r"[!#$%&'*+\-.^_`|~:]+")
def default_operation_id_creator(
route_handler: HTTPRouteHandler,
http_method: Method,
path_components: list[str | PathParameterDefinition],
) -> str:
"""Create a unique 'operationId' for an OpenAPI PathItem entry.
Args:
route_handler: The HTTP Route Handler instance.
http_method: The HTTP method for the given PathItem.
path_components: A list of path components.
Returns:
A camelCased operationId created from the handler function name,
http method and path components.
"""
handler_namespace = (
http_method.title() + route_handler.handler_name.title()
if len(route_handler.http_methods) > 1
else route_handler.handler_name.title()
)
components_namespace = ""
for component in (c.name if isinstance(c, PathParameterDefinition) else c for c in path_components):
if component.title() not in components_namespace:
components_namespace += component.title()
return SEPARATORS_CLEANUP_PATTERN.sub("", components_namespace + handler_namespace)
|