Skip to content

Commit 7bcd4ea

Browse files
committed
refactor(openapi): move parameter sort key to a module level function
1 parent 9f6737b commit 7bcd4ea

1 file changed

Lines changed: 10 additions & 7 deletions

File tree

litestar/_openapi/parameters.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from __future__ import annotations
22

3+
from functools import partial
34
from typing import TYPE_CHECKING
45

56
from litestar._openapi.schema_generation import SchemaCreator
@@ -14,6 +15,8 @@
1415
from litestar.typing import FieldDefinition
1516

1617
if TYPE_CHECKING:
18+
from collections.abc import Mapping
19+
1720
from litestar._openapi.datastructures import OpenAPIContext
1821
from litestar.handlers.base import BaseRouteHandler
1922
from litestar.openapi.spec import Reference
@@ -24,6 +27,12 @@
2427
_PARAM_TYPE_ORDER = {"path": 0, "query": 1, "cookie": 2, "header": 3}
2528

2629

30+
def _parameter_sort_key(parameter: Parameter, path_order: Mapping[str, int]) -> tuple[int, int | str]:
31+
if parameter.param_in == ParamType.PATH:
32+
return _PARAM_TYPE_ORDER[ParamType.PATH], path_order[parameter.name]
33+
return _PARAM_TYPE_ORDER[parameter.param_in], parameter.name
34+
35+
2736
class ParameterCollection:
2837
"""Facilitates conditional deduplication of parameters.
2938
@@ -265,13 +274,7 @@ def _order_parameters(self, parameters: list[Parameter]) -> list[Parameter]:
265274
The parameters, ordered by type and then by url position or name.
266275
"""
267276
path_order = {name: index for index, name in enumerate(self.path_parameters)}
268-
return sorted(
269-
parameters,
270-
key=lambda parameter: (
271-
_PARAM_TYPE_ORDER[parameter.param_in],
272-
path_order[parameter.name] if parameter.param_in == ParamType.PATH else parameter.name,
273-
),
274-
)
277+
return sorted(parameters, key=partial(_parameter_sort_key, path_order=path_order))
275278

276279

277280
def create_parameters_for_handler(

0 commit comments

Comments
 (0)