Skip to content

Commit 41c40ef

Browse files
authored
Merge pull request #7496 from bluetech/typing-idfn
Fix typing of params ids callable form
2 parents fe1fcfd + bc17034 commit 41c40ef

File tree

4 files changed

+38
-13
lines changed

4 files changed

+38
-13
lines changed

src/_pytest/fixtures.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -976,7 +976,7 @@ def __init__(
976976
ids: Optional[
977977
Union[
978978
Tuple[Union[None, str, float, int, bool], ...],
979-
Callable[[object], Optional[object]],
979+
Callable[[Any], Optional[object]],
980980
]
981981
] = None,
982982
) -> None:
@@ -1128,13 +1128,13 @@ def _ensure_immutable_ids(
11281128
ids: Optional[
11291129
Union[
11301130
Iterable[Union[None, str, float, int, bool]],
1131-
Callable[[object], Optional[object]],
1131+
Callable[[Any], Optional[object]],
11321132
]
11331133
],
11341134
) -> Optional[
11351135
Union[
11361136
Tuple[Union[None, str, float, int, bool], ...],
1137-
Callable[[object], Optional[object]],
1137+
Callable[[Any], Optional[object]],
11381138
]
11391139
]:
11401140
if ids is None:
@@ -1180,7 +1180,7 @@ class FixtureFunctionMarker:
11801180
ids = attr.ib(
11811181
type=Union[
11821182
Tuple[Union[None, str, float, int, bool], ...],
1183-
Callable[[object], Optional[object]],
1183+
Callable[[Any], Optional[object]],
11841184
],
11851185
default=None,
11861186
converter=_ensure_immutable_ids,
@@ -1223,7 +1223,7 @@ def fixture(
12231223
ids: Optional[
12241224
Union[
12251225
Iterable[Union[None, str, float, int, bool]],
1226-
Callable[[object], Optional[object]],
1226+
Callable[[Any], Optional[object]],
12271227
]
12281228
] = ...,
12291229
name: Optional[str] = ...
@@ -1241,7 +1241,7 @@ def fixture( # noqa: F811
12411241
ids: Optional[
12421242
Union[
12431243
Iterable[Union[None, str, float, int, bool]],
1244-
Callable[[object], Optional[object]],
1244+
Callable[[Any], Optional[object]],
12451245
]
12461246
] = ...,
12471247
name: Optional[str] = None
@@ -1258,7 +1258,7 @@ def fixture( # noqa: F811
12581258
ids: Optional[
12591259
Union[
12601260
Iterable[Union[None, str, float, int, bool]],
1261-
Callable[[object], Optional[object]],
1261+
Callable[[Any], Optional[object]],
12621262
]
12631263
] = None,
12641264
name: Optional[str] = None

src/_pytest/mark/structures.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -433,7 +433,7 @@ def __call__( # type: ignore[override]
433433
ids: Optional[
434434
Union[
435435
Iterable[Union[None, str, float, int, bool]],
436-
Callable[[object], Optional[object]],
436+
Callable[[Any], Optional[object]],
437437
]
438438
] = ...,
439439
scope: Optional[_Scope] = ...

src/_pytest/python.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from collections import defaultdict
1212
from collections.abc import Sequence
1313
from functools import partial
14+
from typing import Any
1415
from typing import Callable
1516
from typing import Dict
1617
from typing import Generator
@@ -920,7 +921,7 @@ def parametrize(
920921
ids: Optional[
921922
Union[
922923
Iterable[Union[None, str, float, int, bool]],
923-
Callable[[object], Optional[object]],
924+
Callable[[Any], Optional[object]],
924925
]
925926
] = None,
926927
scope: "Optional[_Scope]" = None,
@@ -1040,7 +1041,7 @@ def _resolve_arg_ids(
10401041
ids: Optional[
10411042
Union[
10421043
Iterable[Union[None, str, float, int, bool]],
1043-
Callable[[object], Optional[object]],
1044+
Callable[[Any], Optional[object]],
10441045
]
10451046
],
10461047
parameters: typing.Sequence[ParameterSet],
@@ -1226,7 +1227,7 @@ def _idval(
12261227
val: object,
12271228
argname: str,
12281229
idx: int,
1229-
idfn: Optional[Callable[[object], Optional[object]]],
1230+
idfn: Optional[Callable[[Any], Optional[object]]],
12301231
nodeid: Optional[str],
12311232
config: Optional[Config],
12321233
) -> str:
@@ -1266,7 +1267,7 @@ def _idvalset(
12661267
idx: int,
12671268
parameterset: ParameterSet,
12681269
argnames: Iterable[str],
1269-
idfn: Optional[Callable[[object], Optional[object]]],
1270+
idfn: Optional[Callable[[Any], Optional[object]]],
12701271
ids: Optional[List[Union[None, str]]],
12711272
nodeid: Optional[str],
12721273
config: Optional[Config],
@@ -1287,7 +1288,7 @@ def _idvalset(
12871288
def idmaker(
12881289
argnames: Iterable[str],
12891290
parametersets: Iterable[ParameterSet],
1290-
idfn: Optional[Callable[[object], Optional[object]]] = None,
1291+
idfn: Optional[Callable[[Any], Optional[object]]] = None,
12911292
ids: Optional[List[Union[None, str]]] = None,
12921293
config: Optional[Config] = None,
12931294
nodeid: Optional[str] = None,

testing/typing_checks.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
"""File for checking typing issues.
2+
3+
This file is not executed, it is only checked by mypy to ensure that
4+
none of the code triggers any mypy errors.
5+
"""
6+
import pytest
7+
8+
9+
# Issue #7488.
10+
@pytest.mark.xfail(raises=RuntimeError)
11+
def check_mark_xfail_raises() -> None:
12+
pass
13+
14+
15+
# Issue #7494.
16+
@pytest.fixture(params=[(0, 0), (1, 1)], ids=lambda x: str(x[0]))
17+
def check_fixture_ids_callable() -> None:
18+
pass
19+
20+
21+
# Issue #7494.
22+
@pytest.mark.parametrize("func", [str, int], ids=lambda x: str(x.__name__))
23+
def check_parametrize_ids_callable(func) -> None:
24+
pass

0 commit comments

Comments
 (0)