Merge pull request #7496 from bluetech/typing-idfn

Fix typing of params ids callable form
This commit is contained in:
Ran Benita 2020-07-15 10:25:46 +03:00 committed by GitHub
commit 41c40efe80
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 38 additions and 13 deletions

View File

@ -976,7 +976,7 @@ class FixtureDef(Generic[_FixtureValue]):
ids: Optional[
Union[
Tuple[Union[None, str, float, int, bool], ...],
Callable[[object], Optional[object]],
Callable[[Any], Optional[object]],
]
] = None,
) -> None:
@ -1128,13 +1128,13 @@ def _ensure_immutable_ids(
ids: Optional[
Union[
Iterable[Union[None, str, float, int, bool]],
Callable[[object], Optional[object]],
Callable[[Any], Optional[object]],
]
],
) -> Optional[
Union[
Tuple[Union[None, str, float, int, bool], ...],
Callable[[object], Optional[object]],
Callable[[Any], Optional[object]],
]
]:
if ids is None:
@ -1180,7 +1180,7 @@ class FixtureFunctionMarker:
ids = attr.ib(
type=Union[
Tuple[Union[None, str, float, int, bool], ...],
Callable[[object], Optional[object]],
Callable[[Any], Optional[object]],
],
default=None,
converter=_ensure_immutable_ids,
@ -1223,7 +1223,7 @@ def fixture(
ids: Optional[
Union[
Iterable[Union[None, str, float, int, bool]],
Callable[[object], Optional[object]],
Callable[[Any], Optional[object]],
]
] = ...,
name: Optional[str] = ...
@ -1241,7 +1241,7 @@ def fixture( # noqa: F811
ids: Optional[
Union[
Iterable[Union[None, str, float, int, bool]],
Callable[[object], Optional[object]],
Callable[[Any], Optional[object]],
]
] = ...,
name: Optional[str] = None
@ -1258,7 +1258,7 @@ def fixture( # noqa: F811
ids: Optional[
Union[
Iterable[Union[None, str, float, int, bool]],
Callable[[object], Optional[object]],
Callable[[Any], Optional[object]],
]
] = None,
name: Optional[str] = None

View File

@ -433,7 +433,7 @@ if TYPE_CHECKING:
ids: Optional[
Union[
Iterable[Union[None, str, float, int, bool]],
Callable[[object], Optional[object]],
Callable[[Any], Optional[object]],
]
] = ...,
scope: Optional[_Scope] = ...

View File

@ -11,6 +11,7 @@ from collections import Counter
from collections import defaultdict
from collections.abc import Sequence
from functools import partial
from typing import Any
from typing import Callable
from typing import Dict
from typing import Generator
@ -920,7 +921,7 @@ class Metafunc:
ids: Optional[
Union[
Iterable[Union[None, str, float, int, bool]],
Callable[[object], Optional[object]],
Callable[[Any], Optional[object]],
]
] = None,
scope: "Optional[_Scope]" = None,
@ -1040,7 +1041,7 @@ class Metafunc:
ids: Optional[
Union[
Iterable[Union[None, str, float, int, bool]],
Callable[[object], Optional[object]],
Callable[[Any], Optional[object]],
]
],
parameters: typing.Sequence[ParameterSet],
@ -1226,7 +1227,7 @@ def _idval(
val: object,
argname: str,
idx: int,
idfn: Optional[Callable[[object], Optional[object]]],
idfn: Optional[Callable[[Any], Optional[object]]],
nodeid: Optional[str],
config: Optional[Config],
) -> str:
@ -1266,7 +1267,7 @@ def _idvalset(
idx: int,
parameterset: ParameterSet,
argnames: Iterable[str],
idfn: Optional[Callable[[object], Optional[object]]],
idfn: Optional[Callable[[Any], Optional[object]]],
ids: Optional[List[Union[None, str]]],
nodeid: Optional[str],
config: Optional[Config],
@ -1287,7 +1288,7 @@ def _idvalset(
def idmaker(
argnames: Iterable[str],
parametersets: Iterable[ParameterSet],
idfn: Optional[Callable[[object], Optional[object]]] = None,
idfn: Optional[Callable[[Any], Optional[object]]] = None,
ids: Optional[List[Union[None, str]]] = None,
config: Optional[Config] = None,
nodeid: Optional[str] = None,

24
testing/typing_checks.py Normal file
View File

@ -0,0 +1,24 @@
"""File for checking typing issues.
This file is not executed, it is only checked by mypy to ensure that
none of the code triggers any mypy errors.
"""
import pytest
# Issue #7488.
@pytest.mark.xfail(raises=RuntimeError)
def check_mark_xfail_raises() -> None:
pass
# Issue #7494.
@pytest.fixture(params=[(0, 0), (1, 1)], ids=lambda x: str(x[0]))
def check_fixture_ids_callable() -> None:
pass
# Issue #7494.
@pytest.mark.parametrize("func", [str, int], ids=lambda x: str(x.__name__))
def check_parametrize_ids_callable(func) -> None:
pass