@@ -43,13 +43,15 @@ def _(article):
4343
4444import pytest
4545from _pytest .fixtures import FixtureDef , FixtureRequest
46+ from typing_extensions import ParamSpec
4647
4748from .parser import Step
4849from .parsers import StepParser , get_parser
4950from .types import GIVEN , THEN , WHEN
5051from .utils import get_caller_module_locals
5152
52- TCallable = TypeVar ("TCallable" , bound = Callable [..., Any ])
53+ P = ParamSpec ("P" )
54+ T = TypeVar ("T" )
5355
5456
5557@enum .unique
@@ -63,7 +65,7 @@ class StepFunctionContext:
6365 type : Literal ["given" , "when" , "then" ] | None
6466 step_func : Callable [..., Any ]
6567 parser : StepParser
66- converters : dict [str , Callable [... , Any ]] = field (default_factory = dict )
68+ converters : dict [str , Callable [[ str ] , Any ]] = field (default_factory = dict )
6769 target_fixture : str | None = None
6870
6971
@@ -74,10 +76,10 @@ def get_step_fixture_name(step: Step) -> str:
7476
7577def given (
7678 name : str | StepParser ,
77- converters : dict [str , Callable ] | None = None ,
79+ converters : dict [str , Callable [[ str ], Any ] ] | None = None ,
7880 target_fixture : str | None = None ,
7981 stacklevel : int = 1 ,
80- ) -> Callable :
82+ ) -> Callable [[ Callable [ P , T ]], Callable [ P , T ]] :
8183 """Given step decorator.
8284
8385 :param name: Step name or a parser object.
@@ -93,10 +95,10 @@ def given(
9395
9496def when (
9597 name : str | StepParser ,
96- converters : dict [str , Callable ] | None = None ,
98+ converters : dict [str , Callable [[ str ], Any ] ] | None = None ,
9799 target_fixture : str | None = None ,
98100 stacklevel : int = 1 ,
99- ) -> Callable :
101+ ) -> Callable [[ Callable [ P , T ]], Callable [ P , T ]] :
100102 """When step decorator.
101103
102104 :param name: Step name or a parser object.
@@ -112,10 +114,10 @@ def when(
112114
113115def then (
114116 name : str | StepParser ,
115- converters : dict [str , Callable ] | None = None ,
117+ converters : dict [str , Callable [[ str ], Any ] ] | None = None ,
116118 target_fixture : str | None = None ,
117119 stacklevel : int = 1 ,
118- ) -> Callable :
120+ ) -> Callable [[ Callable [ P , T ]], Callable [ P , T ]] :
119121 """Then step decorator.
120122
121123 :param name: Step name or a parser object.
@@ -132,10 +134,10 @@ def then(
132134def step (
133135 name : str | StepParser ,
134136 type_ : Literal ["given" , "when" , "then" ] | None = None ,
135- converters : dict [str , Callable ] | None = None ,
137+ converters : dict [str , Callable [[ str ], Any ] ] | None = None ,
136138 target_fixture : str | None = None ,
137139 stacklevel : int = 1 ,
138- ) -> Callable [[TCallable ], TCallable ]:
140+ ) -> Callable [[Callable [ P , T ]], Callable [ P , T ] ]:
139141 """Generic step decorator.
140142
141143 :param name: Step name as in the feature file.
@@ -155,7 +157,7 @@ def step(
155157 if converters is None :
156158 converters = {}
157159
158- def decorator (func : TCallable ) -> TCallable :
160+ def decorator (func : Callable [ P , T ] ) -> Callable [ P , T ] :
159161 parser = get_parser (name )
160162
161163 context = StepFunctionContext (
0 commit comments