Skip to content

Commit

Permalink
Add parameters in the right order
Browse files Browse the repository at this point in the history
  • Loading branch information
ApostolFet committed Dec 3, 2024
1 parent f1131a9 commit 23d803d
Showing 1 changed file with 26 additions and 1 deletion.
27 changes: 26 additions & 1 deletion src/dishka/integrations/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from inspect import (
Parameter,
Signature,
_ParameterKind,
isasyncgenfunction,
isgeneratorfunction,
signature,
Expand Down Expand Up @@ -119,7 +120,7 @@ def wrap_injection(

auto_injected_func: Callable[P, T | Awaitable[T]]
if additional_params:
new_params.extend(additional_params)
new_params = _add_params(new_params, additional_params)
for param in additional_params:
new_annotations[param.name] = param.annotation

Expand Down Expand Up @@ -222,3 +223,27 @@ def auto_injected_func(*args: P.args, **kwargs: P.kwargs) -> T:
return func(*args, **kwargs, **solved)

return auto_injected_func


def _add_params(
params: list[Parameter],
additional_params: Sequence[Parameter],
):
params_kind_dict: dict[_ParameterKind, list[Parameter]] = {}

for param in params:
params_kind_dict.setdefault(param.kind, []).append(param)

for param in additional_params:
params_kind_dict.setdefault(param.kind, []).append(param)

result_params = []
result_params.extend(params_kind_dict.get(Parameter.POSITIONAL_ONLY, []))
result_params.extend(
params_kind_dict.get(Parameter.POSITIONAL_OR_KEYWORD, []),
)
result_params.extend(params_kind_dict.get(Parameter.VAR_POSITIONAL, []))
result_params.extend(params_kind_dict.get(Parameter.KEYWORD_ONLY, []))
result_params.extend(params_kind_dict.get(Parameter.VAR_KEYWORD, []))

return result_params

0 comments on commit 23d803d

Please sign in to comment.