Merge pull request #7840 from asottile/py36_typing_Type
py36+: from typing import Type: no longer need guard
This commit is contained in:
commit
6ed07a1c25
|
@ -21,6 +21,7 @@ from typing import Pattern
|
||||||
from typing import Sequence
|
from typing import Sequence
|
||||||
from typing import Set
|
from typing import Set
|
||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
|
from typing import Type
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
from typing import TypeVar
|
from typing import TypeVar
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
@ -44,7 +45,6 @@ from _pytest.compat import overload
|
||||||
from _pytest.pathlib import Path
|
from _pytest.pathlib import Path
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from typing import Type
|
|
||||||
from typing_extensions import Literal
|
from typing_extensions import Literal
|
||||||
from weakref import ReferenceType
|
from weakref import ReferenceType
|
||||||
|
|
||||||
|
@ -421,14 +421,14 @@ class ExceptionInfo(Generic[_E]):
|
||||||
|
|
||||||
_assert_start_repr = "AssertionError('assert "
|
_assert_start_repr = "AssertionError('assert "
|
||||||
|
|
||||||
_excinfo = attr.ib(type=Optional[Tuple["Type[_E]", "_E", TracebackType]])
|
_excinfo = attr.ib(type=Optional[Tuple[Type["_E"], "_E", TracebackType]])
|
||||||
_striptext = attr.ib(type=str, default="")
|
_striptext = attr.ib(type=str, default="")
|
||||||
_traceback = attr.ib(type=Optional[Traceback], default=None)
|
_traceback = attr.ib(type=Optional[Traceback], default=None)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_exc_info(
|
def from_exc_info(
|
||||||
cls,
|
cls,
|
||||||
exc_info: Tuple["Type[_E]", "_E", TracebackType],
|
exc_info: Tuple[Type[_E], _E, TracebackType],
|
||||||
exprinfo: Optional[str] = None,
|
exprinfo: Optional[str] = None,
|
||||||
) -> "ExceptionInfo[_E]":
|
) -> "ExceptionInfo[_E]":
|
||||||
"""Return an ExceptionInfo for an existing exc_info tuple.
|
"""Return an ExceptionInfo for an existing exc_info tuple.
|
||||||
|
@ -479,13 +479,13 @@ class ExceptionInfo(Generic[_E]):
|
||||||
"""Return an unfilled ExceptionInfo."""
|
"""Return an unfilled ExceptionInfo."""
|
||||||
return cls(None)
|
return cls(None)
|
||||||
|
|
||||||
def fill_unfilled(self, exc_info: Tuple["Type[_E]", _E, TracebackType]) -> None:
|
def fill_unfilled(self, exc_info: Tuple[Type[_E], _E, TracebackType]) -> None:
|
||||||
"""Fill an unfilled ExceptionInfo created with ``for_later()``."""
|
"""Fill an unfilled ExceptionInfo created with ``for_later()``."""
|
||||||
assert self._excinfo is None, "ExceptionInfo was already filled"
|
assert self._excinfo is None, "ExceptionInfo was already filled"
|
||||||
self._excinfo = exc_info
|
self._excinfo = exc_info
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def type(self) -> "Type[_E]":
|
def type(self) -> Type[_E]:
|
||||||
"""The exception class."""
|
"""The exception class."""
|
||||||
assert (
|
assert (
|
||||||
self._excinfo is not None
|
self._excinfo is not None
|
||||||
|
@ -551,7 +551,7 @@ class ExceptionInfo(Generic[_E]):
|
||||||
return text
|
return text
|
||||||
|
|
||||||
def errisinstance(
|
def errisinstance(
|
||||||
self, exc: Union["Type[BaseException]", Tuple["Type[BaseException]", ...]]
|
self, exc: Union[Type[BaseException], Tuple[Type[BaseException], ...]]
|
||||||
) -> bool:
|
) -> bool:
|
||||||
"""Return True if the exception is an instance of exc.
|
"""Return True if the exception is an instance of exc.
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,6 @@ from _pytest.outcomes import TEST_OUTCOME
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from typing import NoReturn
|
from typing import NoReturn
|
||||||
from typing import Type
|
|
||||||
from typing_extensions import Final
|
from typing_extensions import Final
|
||||||
|
|
||||||
|
|
||||||
|
@ -349,6 +348,7 @@ else:
|
||||||
if sys.version_info >= (3, 8):
|
if sys.version_info >= (3, 8):
|
||||||
from functools import cached_property as cached_property
|
from functools import cached_property as cached_property
|
||||||
else:
|
else:
|
||||||
|
from typing import Type
|
||||||
|
|
||||||
class cached_property(Generic[_S, _T]):
|
class cached_property(Generic[_S, _T]):
|
||||||
__slots__ = ("func", "__doc__")
|
__slots__ = ("func", "__doc__")
|
||||||
|
@ -359,13 +359,13 @@ else:
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def __get__(
|
def __get__(
|
||||||
self, instance: None, owner: Optional["Type[_S]"] = ...
|
self, instance: None, owner: Optional[Type[_S]] = ...
|
||||||
) -> "cached_property[_S, _T]":
|
) -> "cached_property[_S, _T]":
|
||||||
...
|
...
|
||||||
|
|
||||||
@overload # noqa: F811
|
@overload # noqa: F811
|
||||||
def __get__( # noqa: F811
|
def __get__( # noqa: F811
|
||||||
self, instance: _S, owner: Optional["Type[_S]"] = ...
|
self, instance: _S, owner: Optional[Type[_S]] = ...
|
||||||
) -> _T:
|
) -> _T:
|
||||||
...
|
...
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,7 @@ from typing import Sequence
|
||||||
from typing import Set
|
from typing import Set
|
||||||
from typing import TextIO
|
from typing import TextIO
|
||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
|
from typing import Type
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
|
||||||
|
@ -56,7 +57,6 @@ from _pytest.store import Store
|
||||||
from _pytest.warning_types import PytestConfigWarning
|
from _pytest.warning_types import PytestConfigWarning
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from typing import Type
|
|
||||||
|
|
||||||
from _pytest._code.code import _TracebackStyle
|
from _pytest._code.code import _TracebackStyle
|
||||||
from _pytest.terminal import TerminalReporter
|
from _pytest.terminal import TerminalReporter
|
||||||
|
@ -104,7 +104,7 @@ class ConftestImportFailure(Exception):
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
path: py.path.local,
|
path: py.path.local,
|
||||||
excinfo: Tuple["Type[Exception]", Exception, TracebackType],
|
excinfo: Tuple[Type[Exception], Exception, TracebackType],
|
||||||
) -> None:
|
) -> None:
|
||||||
super().__init__(path, excinfo)
|
super().__init__(path, excinfo)
|
||||||
self.path = path
|
self.path = path
|
||||||
|
@ -1560,7 +1560,7 @@ def _strtobool(val: str) -> bool:
|
||||||
@lru_cache(maxsize=50)
|
@lru_cache(maxsize=50)
|
||||||
def parse_warning_filter(
|
def parse_warning_filter(
|
||||||
arg: str, *, escape: bool
|
arg: str, *, escape: bool
|
||||||
) -> "Tuple[str, str, Type[Warning], str, int]":
|
) -> Tuple[str, str, Type[Warning], str, int]:
|
||||||
"""Parse a warnings filter string.
|
"""Parse a warnings filter string.
|
||||||
|
|
||||||
This is copied from warnings._setoption, but does not apply the filter,
|
This is copied from warnings._setoption, but does not apply the filter,
|
||||||
|
@ -1573,9 +1573,7 @@ def parse_warning_filter(
|
||||||
parts.append("")
|
parts.append("")
|
||||||
action_, message, category_, module, lineno_ = [s.strip() for s in parts]
|
action_, message, category_, module, lineno_ = [s.strip() for s in parts]
|
||||||
action = warnings._getaction(action_) # type: str # type: ignore[attr-defined]
|
action = warnings._getaction(action_) # type: str # type: ignore[attr-defined]
|
||||||
category = warnings._getcategory(
|
category: Type[Warning] = warnings._getcategory(category_) # type: ignore[attr-defined]
|
||||||
category_
|
|
||||||
) # type: Type[Warning] # type: ignore[attr-defined]
|
|
||||||
if message and escape:
|
if message and escape:
|
||||||
message = re.escape(message)
|
message = re.escape(message)
|
||||||
if module and escape:
|
if module and escape:
|
||||||
|
|
|
@ -9,6 +9,7 @@ from typing import Generator
|
||||||
from typing import List
|
from typing import List
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
|
from typing import Type
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
|
||||||
|
@ -24,8 +25,6 @@ from _pytest.nodes import Node
|
||||||
from _pytest.reports import BaseReport
|
from _pytest.reports import BaseReport
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from typing import Type
|
|
||||||
|
|
||||||
from _pytest.capture import CaptureManager
|
from _pytest.capture import CaptureManager
|
||||||
from _pytest.runner import CallInfo
|
from _pytest.runner import CallInfo
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@ from typing import Optional
|
||||||
from typing import Pattern
|
from typing import Pattern
|
||||||
from typing import Sequence
|
from typing import Sequence
|
||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
|
from typing import Type
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
|
||||||
|
@ -40,7 +41,6 @@ from _pytest.warning_types import PytestWarning
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
import doctest
|
import doctest
|
||||||
from typing import Type
|
|
||||||
|
|
||||||
DOCTEST_REPORT_CHOICE_NONE = "none"
|
DOCTEST_REPORT_CHOICE_NONE = "none"
|
||||||
DOCTEST_REPORT_CHOICE_CDIFF = "cdiff"
|
DOCTEST_REPORT_CHOICE_CDIFF = "cdiff"
|
||||||
|
@ -168,7 +168,7 @@ class MultipleDoctestFailures(Exception):
|
||||||
self.failures = failures
|
self.failures = failures
|
||||||
|
|
||||||
|
|
||||||
def _init_runner_class() -> "Type[doctest.DocTestRunner]":
|
def _init_runner_class() -> Type["doctest.DocTestRunner"]:
|
||||||
import doctest
|
import doctest
|
||||||
|
|
||||||
class PytestDoctestRunner(doctest.DebugRunner):
|
class PytestDoctestRunner(doctest.DebugRunner):
|
||||||
|
@ -204,7 +204,7 @@ def _init_runner_class() -> "Type[doctest.DocTestRunner]":
|
||||||
out,
|
out,
|
||||||
test: "doctest.DocTest",
|
test: "doctest.DocTest",
|
||||||
example: "doctest.Example",
|
example: "doctest.Example",
|
||||||
exc_info: "Tuple[Type[BaseException], BaseException, types.TracebackType]",
|
exc_info: Tuple[Type[BaseException], BaseException, types.TracebackType],
|
||||||
) -> None:
|
) -> None:
|
||||||
if isinstance(exc_info[1], OutcomeException):
|
if isinstance(exc_info[1], OutcomeException):
|
||||||
raise exc_info[1]
|
raise exc_info[1]
|
||||||
|
@ -568,7 +568,7 @@ def _setup_fixtures(doctest_item: DoctestItem) -> FixtureRequest:
|
||||||
return fixture_request
|
return fixture_request
|
||||||
|
|
||||||
|
|
||||||
def _init_checker_class() -> "Type[doctest.OutputChecker]":
|
def _init_checker_class() -> Type["doctest.OutputChecker"]:
|
||||||
import doctest
|
import doctest
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@ from typing import Optional
|
||||||
from typing import Sequence
|
from typing import Sequence
|
||||||
from typing import Set
|
from typing import Set
|
||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
|
from typing import Type
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
from typing import TypeVar
|
from typing import TypeVar
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
@ -57,7 +58,6 @@ from _pytest.pathlib import absolutepath
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from typing import Deque
|
from typing import Deque
|
||||||
from typing import NoReturn
|
from typing import NoReturn
|
||||||
from typing import Type
|
|
||||||
from typing_extensions import Literal
|
from typing_extensions import Literal
|
||||||
|
|
||||||
from _pytest import nodes
|
from _pytest import nodes
|
||||||
|
@ -91,7 +91,7 @@ _FixtureCachedResult = Union[
|
||||||
# Cache key.
|
# Cache key.
|
||||||
object,
|
object,
|
||||||
# Exc info if raised.
|
# Exc info if raised.
|
||||||
Tuple["Type[BaseException]", BaseException, TracebackType],
|
Tuple[Type[BaseException], BaseException, TracebackType],
|
||||||
],
|
],
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@ from typing import Optional
|
||||||
from typing import Sequence
|
from typing import Sequence
|
||||||
from typing import Set
|
from typing import Set
|
||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
|
from typing import Type
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
|
||||||
|
@ -44,7 +45,6 @@ from _pytest.runner import SetupState
|
||||||
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from typing import Type
|
|
||||||
from typing_extensions import Literal
|
from typing_extensions import Literal
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@ from typing import Optional
|
||||||
from typing import Sequence
|
from typing import Sequence
|
||||||
from typing import Set
|
from typing import Set
|
||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
|
from typing import Type
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
from typing import TypeVar
|
from typing import TypeVar
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
@ -31,8 +32,6 @@ from _pytest.outcomes import fail
|
||||||
from _pytest.warning_types import PytestUnknownMarkWarning
|
from _pytest.warning_types import PytestUnknownMarkWarning
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from typing import Type
|
|
||||||
|
|
||||||
from ..nodes import Node
|
from ..nodes import Node
|
||||||
|
|
||||||
|
|
||||||
|
@ -417,9 +416,7 @@ if TYPE_CHECKING:
|
||||||
*conditions: Union[str, bool],
|
*conditions: Union[str, bool],
|
||||||
reason: str = ...,
|
reason: str = ...,
|
||||||
run: bool = ...,
|
run: bool = ...,
|
||||||
raises: Union[
|
raises: Union[Type[BaseException], Tuple[Type[BaseException], ...]] = ...,
|
||||||
"Type[BaseException]", Tuple["Type[BaseException]", ...]
|
|
||||||
] = ...,
|
|
||||||
strict: bool = ...
|
strict: bool = ...
|
||||||
) -> MarkDecorator:
|
) -> MarkDecorator:
|
||||||
...
|
...
|
||||||
|
|
|
@ -10,6 +10,7 @@ from typing import List
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
from typing import Set
|
from typing import Set
|
||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
|
from typing import Type
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
from typing import TypeVar
|
from typing import TypeVar
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
@ -36,8 +37,6 @@ from _pytest.pathlib import Path
|
||||||
from _pytest.store import Store
|
from _pytest.store import Store
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from typing import Type
|
|
||||||
|
|
||||||
# Imported here due to circular import.
|
# Imported here due to circular import.
|
||||||
from _pytest.main import Session
|
from _pytest.main import Session
|
||||||
from _pytest.warning_types import PytestWarning
|
from _pytest.warning_types import PytestWarning
|
||||||
|
@ -350,7 +349,7 @@ class Node(metaclass=NodeMeta):
|
||||||
"""
|
"""
|
||||||
self.session._setupstate.addfinalizer(fin, self)
|
self.session._setupstate.addfinalizer(fin, self)
|
||||||
|
|
||||||
def getparent(self, cls: "Type[_NodeType]") -> Optional[_NodeType]:
|
def getparent(self, cls: Type[_NodeType]) -> Optional[_NodeType]:
|
||||||
"""Get the next parent node (including self) which is an instance of
|
"""Get the next parent node (including self) which is an instance of
|
||||||
the given class."""
|
the given class."""
|
||||||
current = self # type: Optional[Node]
|
current = self # type: Optional[Node]
|
||||||
|
|
|
@ -5,13 +5,13 @@ from typing import Any
|
||||||
from typing import Callable
|
from typing import Callable
|
||||||
from typing import cast
|
from typing import cast
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
from typing import Type
|
||||||
from typing import TypeVar
|
from typing import TypeVar
|
||||||
|
|
||||||
TYPE_CHECKING = False # Avoid circular import through compat.
|
TYPE_CHECKING = False # Avoid circular import through compat.
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from typing import NoReturn
|
from typing import NoReturn
|
||||||
from typing import Type # noqa: F401 (used in type string)
|
|
||||||
from typing_extensions import Protocol
|
from typing_extensions import Protocol
|
||||||
else:
|
else:
|
||||||
# typing.Protocol is only available starting from Python 3.8. It is also
|
# typing.Protocol is only available starting from Python 3.8. It is also
|
||||||
|
@ -84,7 +84,7 @@ class Exit(Exception):
|
||||||
# Ideally would just be `exit.Exception = Exit` etc.
|
# Ideally would just be `exit.Exception = Exit` etc.
|
||||||
|
|
||||||
_F = TypeVar("_F", bound=Callable[..., object])
|
_F = TypeVar("_F", bound=Callable[..., object])
|
||||||
_ET = TypeVar("_ET", bound="Type[BaseException]")
|
_ET = TypeVar("_ET", bound=Type[BaseException])
|
||||||
|
|
||||||
|
|
||||||
class _WithException(Protocol[_F, _ET]):
|
class _WithException(Protocol[_F, _ET]):
|
||||||
|
|
|
@ -18,6 +18,7 @@ from typing import List
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
from typing import Sequence
|
from typing import Sequence
|
||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
|
from typing import Type
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
from typing import Union
|
from typing import Union
|
||||||
from weakref import WeakKeyDictionary
|
from weakref import WeakKeyDictionary
|
||||||
|
@ -49,7 +50,6 @@ from _pytest.reports import TestReport
|
||||||
from _pytest.tmpdir import TempdirFactory
|
from _pytest.tmpdir import TempdirFactory
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from typing import Type
|
|
||||||
from typing_extensions import Literal
|
from typing_extensions import Literal
|
||||||
|
|
||||||
import pexpect
|
import pexpect
|
||||||
|
@ -420,7 +420,7 @@ def linecomp() -> "LineComp":
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(name="LineMatcher")
|
@pytest.fixture(name="LineMatcher")
|
||||||
def LineMatcher_fixture(request: FixtureRequest) -> "Type[LineMatcher]":
|
def LineMatcher_fixture(request: FixtureRequest) -> Type["LineMatcher"]:
|
||||||
"""A reference to the :class: `LineMatcher`.
|
"""A reference to the :class: `LineMatcher`.
|
||||||
|
|
||||||
This is instantiable with a list of lines (without their trailing newlines).
|
This is instantiable with a list of lines (without their trailing newlines).
|
||||||
|
|
|
@ -22,6 +22,7 @@ from typing import Optional
|
||||||
from typing import Sequence
|
from typing import Sequence
|
||||||
from typing import Set
|
from typing import Set
|
||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
|
from typing import Type
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
|
||||||
|
@ -72,7 +73,6 @@ from _pytest.warning_types import PytestCollectionWarning
|
||||||
from _pytest.warning_types import PytestUnhandledCoroutineWarning
|
from _pytest.warning_types import PytestUnhandledCoroutineWarning
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from typing import Type
|
|
||||||
from typing_extensions import Literal
|
from typing_extensions import Literal
|
||||||
from _pytest.fixtures import _Scope
|
from _pytest.fixtures import _Scope
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@ from typing import Generic
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
from typing import Pattern
|
from typing import Pattern
|
||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
from typing import TYPE_CHECKING
|
from typing import Type
|
||||||
from typing import TypeVar
|
from typing import TypeVar
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
|
||||||
|
@ -23,9 +23,6 @@ from _pytest.compat import overload
|
||||||
from _pytest.compat import STRING_TYPES
|
from _pytest.compat import STRING_TYPES
|
||||||
from _pytest.outcomes import fail
|
from _pytest.outcomes import fail
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
|
||||||
from typing import Type
|
|
||||||
|
|
||||||
|
|
||||||
def _non_numeric_type_error(value, at: Optional[str]) -> TypeError:
|
def _non_numeric_type_error(value, at: Optional[str]) -> TypeError:
|
||||||
at_str = " at {}".format(at) if at else ""
|
at_str = " at {}".format(at) if at else ""
|
||||||
|
@ -560,7 +557,7 @@ _E = TypeVar("_E", bound=BaseException)
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def raises(
|
def raises(
|
||||||
expected_exception: Union["Type[_E]", Tuple["Type[_E]", ...]],
|
expected_exception: Union[Type[_E], Tuple[Type[_E], ...]],
|
||||||
*,
|
*,
|
||||||
match: Optional[Union[str, Pattern[str]]] = ...
|
match: Optional[Union[str, Pattern[str]]] = ...
|
||||||
) -> "RaisesContext[_E]":
|
) -> "RaisesContext[_E]":
|
||||||
|
@ -569,7 +566,7 @@ def raises(
|
||||||
|
|
||||||
@overload # noqa: F811
|
@overload # noqa: F811
|
||||||
def raises( # noqa: F811
|
def raises( # noqa: F811
|
||||||
expected_exception: Union["Type[_E]", Tuple["Type[_E]", ...]],
|
expected_exception: Union[Type[_E], Tuple[Type[_E], ...]],
|
||||||
func: Callable[..., Any],
|
func: Callable[..., Any],
|
||||||
*args: Any,
|
*args: Any,
|
||||||
**kwargs: Any
|
**kwargs: Any
|
||||||
|
@ -578,9 +575,7 @@ def raises( # noqa: F811
|
||||||
|
|
||||||
|
|
||||||
def raises( # noqa: F811
|
def raises( # noqa: F811
|
||||||
expected_exception: Union["Type[_E]", Tuple["Type[_E]", ...]],
|
expected_exception: Union[Type[_E], Tuple[Type[_E], ...]], *args: Any, **kwargs: Any
|
||||||
*args: Any,
|
|
||||||
**kwargs: Any
|
|
||||||
) -> Union["RaisesContext[_E]", _pytest._code.ExceptionInfo[_E]]:
|
) -> Union["RaisesContext[_E]", _pytest._code.ExceptionInfo[_E]]:
|
||||||
r"""Assert that a code block/function call raises ``expected_exception``
|
r"""Assert that a code block/function call raises ``expected_exception``
|
||||||
or raise a failure exception otherwise.
|
or raise a failure exception otherwise.
|
||||||
|
@ -738,7 +733,7 @@ raises.Exception = fail.Exception # type: ignore
|
||||||
class RaisesContext(Generic[_E]):
|
class RaisesContext(Generic[_E]):
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
expected_exception: Union["Type[_E]", Tuple["Type[_E]", ...]],
|
expected_exception: Union[Type[_E], Tuple[Type[_E], ...]],
|
||||||
message: str,
|
message: str,
|
||||||
match_expr: Optional[Union[str, Pattern[str]]] = None,
|
match_expr: Optional[Union[str, Pattern[str]]] = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
|
@ -753,7 +748,7 @@ class RaisesContext(Generic[_E]):
|
||||||
|
|
||||||
def __exit__(
|
def __exit__(
|
||||||
self,
|
self,
|
||||||
exc_type: Optional["Type[BaseException]"],
|
exc_type: Optional[Type[BaseException]],
|
||||||
exc_val: Optional[BaseException],
|
exc_val: Optional[BaseException],
|
||||||
exc_tb: Optional[TracebackType],
|
exc_tb: Optional[TracebackType],
|
||||||
) -> bool:
|
) -> bool:
|
||||||
|
@ -764,9 +759,7 @@ class RaisesContext(Generic[_E]):
|
||||||
if not issubclass(exc_type, self.expected_exception):
|
if not issubclass(exc_type, self.expected_exception):
|
||||||
return False
|
return False
|
||||||
# Cast to narrow the exception type now that it's verified.
|
# Cast to narrow the exception type now that it's verified.
|
||||||
exc_info = cast(
|
exc_info = cast(Tuple[Type[_E], _E, TracebackType], (exc_type, exc_val, exc_tb))
|
||||||
Tuple["Type[_E]", _E, TracebackType], (exc_type, exc_val, exc_tb)
|
|
||||||
)
|
|
||||||
self.excinfo.fill_unfilled(exc_info)
|
self.excinfo.fill_unfilled(exc_info)
|
||||||
if self.match_expr is not None:
|
if self.match_expr is not None:
|
||||||
self.excinfo.match(self.match_expr)
|
self.excinfo.match(self.match_expr)
|
||||||
|
|
|
@ -10,7 +10,7 @@ from typing import List
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
from typing import Pattern
|
from typing import Pattern
|
||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
from typing import TYPE_CHECKING
|
from typing import Type
|
||||||
from typing import TypeVar
|
from typing import TypeVar
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
|
||||||
|
@ -19,9 +19,6 @@ from _pytest.compat import overload
|
||||||
from _pytest.fixtures import fixture
|
from _pytest.fixtures import fixture
|
||||||
from _pytest.outcomes import fail
|
from _pytest.outcomes import fail
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
|
||||||
from typing import Type
|
|
||||||
|
|
||||||
|
|
||||||
T = TypeVar("T")
|
T = TypeVar("T")
|
||||||
|
|
||||||
|
@ -86,7 +83,7 @@ def deprecated_call( # noqa: F811
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def warns(
|
def warns(
|
||||||
expected_warning: Optional[Union["Type[Warning]", Tuple["Type[Warning]", ...]]],
|
expected_warning: Optional[Union[Type[Warning], Tuple[Type[Warning], ...]]],
|
||||||
*,
|
*,
|
||||||
match: Optional[Union[str, Pattern[str]]] = ...
|
match: Optional[Union[str, Pattern[str]]] = ...
|
||||||
) -> "WarningsChecker":
|
) -> "WarningsChecker":
|
||||||
|
@ -95,7 +92,7 @@ def warns(
|
||||||
|
|
||||||
@overload # noqa: F811
|
@overload # noqa: F811
|
||||||
def warns( # noqa: F811
|
def warns( # noqa: F811
|
||||||
expected_warning: Optional[Union["Type[Warning]", Tuple["Type[Warning]", ...]]],
|
expected_warning: Optional[Union[Type[Warning], Tuple[Type[Warning], ...]]],
|
||||||
func: Callable[..., T],
|
func: Callable[..., T],
|
||||||
*args: Any,
|
*args: Any,
|
||||||
**kwargs: Any
|
**kwargs: Any
|
||||||
|
@ -104,7 +101,7 @@ def warns( # noqa: F811
|
||||||
|
|
||||||
|
|
||||||
def warns( # noqa: F811
|
def warns( # noqa: F811
|
||||||
expected_warning: Optional[Union["Type[Warning]", Tuple["Type[Warning]", ...]]],
|
expected_warning: Optional[Union[Type[Warning], Tuple[Type[Warning], ...]]],
|
||||||
*args: Any,
|
*args: Any,
|
||||||
match: Optional[Union[str, Pattern[str]]] = None,
|
match: Optional[Union[str, Pattern[str]]] = None,
|
||||||
**kwargs: Any
|
**kwargs: Any
|
||||||
|
@ -187,7 +184,7 @@ class WarningsRecorder(warnings.catch_warnings):
|
||||||
"""The number of recorded warnings."""
|
"""The number of recorded warnings."""
|
||||||
return len(self._list)
|
return len(self._list)
|
||||||
|
|
||||||
def pop(self, cls: "Type[Warning]" = Warning) -> "warnings.WarningMessage":
|
def pop(self, cls: Type[Warning] = Warning) -> "warnings.WarningMessage":
|
||||||
"""Pop the first recorded warning, raise exception if not exists."""
|
"""Pop the first recorded warning, raise exception if not exists."""
|
||||||
for i, w in enumerate(self._list):
|
for i, w in enumerate(self._list):
|
||||||
if issubclass(w.category, cls):
|
if issubclass(w.category, cls):
|
||||||
|
@ -214,7 +211,7 @@ class WarningsRecorder(warnings.catch_warnings):
|
||||||
|
|
||||||
def __exit__(
|
def __exit__(
|
||||||
self,
|
self,
|
||||||
exc_type: Optional["Type[BaseException]"],
|
exc_type: Optional[Type[BaseException]],
|
||||||
exc_val: Optional[BaseException],
|
exc_val: Optional[BaseException],
|
||||||
exc_tb: Optional[TracebackType],
|
exc_tb: Optional[TracebackType],
|
||||||
) -> None:
|
) -> None:
|
||||||
|
@ -234,7 +231,7 @@ class WarningsChecker(WarningsRecorder):
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
expected_warning: Optional[
|
expected_warning: Optional[
|
||||||
Union["Type[Warning]", Tuple["Type[Warning]", ...]]
|
Union[Type[Warning], Tuple[Type[Warning], ...]]
|
||||||
] = None,
|
] = None,
|
||||||
match_expr: Optional[Union[str, Pattern[str]]] = None,
|
match_expr: Optional[Union[str, Pattern[str]]] = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
|
@ -258,7 +255,7 @@ class WarningsChecker(WarningsRecorder):
|
||||||
|
|
||||||
def __exit__(
|
def __exit__(
|
||||||
self,
|
self,
|
||||||
exc_type: Optional["Type[BaseException]"],
|
exc_type: Optional[Type[BaseException]],
|
||||||
exc_val: Optional[BaseException],
|
exc_val: Optional[BaseException],
|
||||||
exc_tb: Optional[TracebackType],
|
exc_tb: Optional[TracebackType],
|
||||||
) -> None:
|
) -> None:
|
||||||
|
|
|
@ -8,6 +8,7 @@ from typing import Iterator
|
||||||
from typing import List
|
from typing import List
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
|
from typing import Type
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
from typing import TypeVar
|
from typing import TypeVar
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
@ -36,7 +37,6 @@ from _pytest.pathlib import Path
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from typing import NoReturn
|
from typing import NoReturn
|
||||||
from typing_extensions import Type
|
|
||||||
from typing_extensions import Literal
|
from typing_extensions import Literal
|
||||||
|
|
||||||
from _pytest.runner import CallInfo
|
from _pytest.runner import CallInfo
|
||||||
|
@ -199,7 +199,7 @@ class BaseReport:
|
||||||
return _report_to_json(self)
|
return _report_to_json(self)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _from_json(cls: "Type[_R]", reportdict: Dict[str, object]) -> _R:
|
def _from_json(cls: Type[_R], reportdict: Dict[str, object]) -> _R:
|
||||||
"""Create either a TestReport or CollectReport, depending on the calling class.
|
"""Create either a TestReport or CollectReport, depending on the calling class.
|
||||||
|
|
||||||
It is the callers responsibility to know which class to pass here.
|
It is the callers responsibility to know which class to pass here.
|
||||||
|
@ -213,7 +213,7 @@ class BaseReport:
|
||||||
|
|
||||||
|
|
||||||
def _report_unserialization_failure(
|
def _report_unserialization_failure(
|
||||||
type_name: str, report_class: "Type[BaseReport]", reportdict
|
type_name: str, report_class: Type[BaseReport], reportdict
|
||||||
) -> "NoReturn":
|
) -> "NoReturn":
|
||||||
url = "https://github.com/pytest-dev/pytest/issues"
|
url = "https://github.com/pytest-dev/pytest/issues"
|
||||||
stream = StringIO()
|
stream = StringIO()
|
||||||
|
|
|
@ -9,6 +9,7 @@ from typing import Generic
|
||||||
from typing import List
|
from typing import List
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
|
from typing import Type
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
from typing import TypeVar
|
from typing import TypeVar
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
@ -33,7 +34,6 @@ from _pytest.outcomes import Skipped
|
||||||
from _pytest.outcomes import TEST_OUTCOME
|
from _pytest.outcomes import TEST_OUTCOME
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from typing import Type
|
|
||||||
from typing_extensions import Literal
|
from typing_extensions import Literal
|
||||||
|
|
||||||
from _pytest.main import Session
|
from _pytest.main import Session
|
||||||
|
@ -301,7 +301,9 @@ class CallInfo(Generic[TResult]):
|
||||||
cls,
|
cls,
|
||||||
func: "Callable[[], TResult]",
|
func: "Callable[[], TResult]",
|
||||||
when: "Literal['collect', 'setup', 'call', 'teardown']",
|
when: "Literal['collect', 'setup', 'call', 'teardown']",
|
||||||
reraise: "Optional[Union[Type[BaseException], Tuple[Type[BaseException], ...]]]" = None,
|
reraise: Optional[
|
||||||
|
Union[Type[BaseException], Tuple[Type[BaseException], ...]]
|
||||||
|
] = None,
|
||||||
) -> "CallInfo[TResult]":
|
) -> "CallInfo[TResult]":
|
||||||
excinfo = None
|
excinfo = None
|
||||||
start = timing.time()
|
start = timing.time()
|
||||||
|
|
|
@ -6,7 +6,7 @@ import traceback
|
||||||
from typing import Generator
|
from typing import Generator
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
from typing import TYPE_CHECKING
|
from typing import Type
|
||||||
|
|
||||||
import attr
|
import attr
|
||||||
|
|
||||||
|
@ -22,9 +22,6 @@ from _pytest.reports import BaseReport
|
||||||
from _pytest.runner import CallInfo
|
from _pytest.runner import CallInfo
|
||||||
from _pytest.store import StoreKey
|
from _pytest.store import StoreKey
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
|
||||||
from typing import Type
|
|
||||||
|
|
||||||
|
|
||||||
def pytest_addoption(parser: Parser) -> None:
|
def pytest_addoption(parser: Parser) -> None:
|
||||||
group = parser.getgroup("general")
|
group = parser.getgroup("general")
|
||||||
|
@ -194,7 +191,7 @@ class Xfail:
|
||||||
reason = attr.ib(type=str)
|
reason = attr.ib(type=str)
|
||||||
run = attr.ib(type=bool)
|
run = attr.ib(type=bool)
|
||||||
strict = attr.ib(type=bool)
|
strict = attr.ib(type=bool)
|
||||||
raises = attr.ib(type=Optional[Tuple["Type[BaseException]", ...]])
|
raises = attr.ib(type=Optional[Tuple[Type[BaseException], ...]])
|
||||||
|
|
||||||
|
|
||||||
def evaluate_xfail_marks(item: Item) -> Optional[Xfail]:
|
def evaluate_xfail_marks(item: Item) -> Optional[Xfail]:
|
||||||
|
|
|
@ -9,6 +9,7 @@ from typing import Iterable
|
||||||
from typing import List
|
from typing import List
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
|
from typing import Type
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
|
||||||
|
@ -33,7 +34,6 @@ from _pytest.skipping import unexpectedsuccess_key
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
import unittest
|
import unittest
|
||||||
from typing import Type
|
|
||||||
|
|
||||||
from _pytest.fixtures import _Scope
|
from _pytest.fixtures import _Scope
|
||||||
|
|
||||||
|
|
|
@ -1,15 +1,12 @@
|
||||||
from typing import Any
|
from typing import Any
|
||||||
from typing import Generic
|
from typing import Generic
|
||||||
from typing import TYPE_CHECKING
|
from typing import Type
|
||||||
from typing import TypeVar
|
from typing import TypeVar
|
||||||
|
|
||||||
import attr
|
import attr
|
||||||
|
|
||||||
from _pytest.compat import final
|
from _pytest.compat import final
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
|
||||||
from typing import Type # noqa: F401 (used in type string)
|
|
||||||
|
|
||||||
|
|
||||||
class PytestWarning(UserWarning):
|
class PytestWarning(UserWarning):
|
||||||
"""Base class for all warnings emitted by pytest."""
|
"""Base class for all warnings emitted by pytest."""
|
||||||
|
@ -105,7 +102,7 @@ class UnformattedWarning(Generic[_W]):
|
||||||
as opposed to a direct message.
|
as opposed to a direct message.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
category = attr.ib(type="Type[_W]")
|
category = attr.ib(type=Type["_W"])
|
||||||
template = attr.ib(type=str)
|
template = attr.ib(type=str)
|
||||||
|
|
||||||
def format(self, **kwargs: Any) -> _W:
|
def format(self, **kwargs: Any) -> _W:
|
||||||
|
|
|
@ -6,7 +6,7 @@ from typing import Dict
|
||||||
from typing import List
|
from typing import List
|
||||||
from typing import Sequence
|
from typing import Sequence
|
||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
from typing import TYPE_CHECKING
|
from typing import Type
|
||||||
|
|
||||||
import attr
|
import attr
|
||||||
import py.path
|
import py.path
|
||||||
|
@ -29,9 +29,6 @@ from _pytest.monkeypatch import MonkeyPatch
|
||||||
from _pytest.pathlib import Path
|
from _pytest.pathlib import Path
|
||||||
from _pytest.pytester import Testdir
|
from _pytest.pytester import Testdir
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
|
||||||
from typing import Type
|
|
||||||
|
|
||||||
|
|
||||||
class TestParseIni:
|
class TestParseIni:
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
|
@ -1936,7 +1933,7 @@ def test_strtobool():
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
def test_parse_warning_filter(
|
def test_parse_warning_filter(
|
||||||
arg: str, escape: bool, expected: "Tuple[str, str, Type[Warning], str, int]"
|
arg: str, escape: bool, expected: Tuple[str, str, Type[Warning], str, int]
|
||||||
) -> None:
|
) -> None:
|
||||||
assert parse_warning_filter(arg, escape=escape) == expected
|
assert parse_warning_filter(arg, escape=escape) == expected
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ import sys
|
||||||
import textwrap
|
import textwrap
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
from typing import Generator
|
from typing import Generator
|
||||||
from typing import TYPE_CHECKING
|
from typing import Type
|
||||||
|
|
||||||
import py
|
import py
|
||||||
|
|
||||||
|
@ -12,9 +12,6 @@ import pytest
|
||||||
from _pytest.monkeypatch import MonkeyPatch
|
from _pytest.monkeypatch import MonkeyPatch
|
||||||
from _pytest.pytester import Testdir
|
from _pytest.pytester import Testdir
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
|
||||||
from typing import Type
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def mp() -> Generator[MonkeyPatch, None, None]:
|
def mp() -> Generator[MonkeyPatch, None, None]:
|
||||||
|
@ -354,7 +351,7 @@ class SampleInherit(Sample):
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"Sample", [Sample, SampleInherit], ids=["new", "new-inherit"],
|
"Sample", [Sample, SampleInherit], ids=["new", "new-inherit"],
|
||||||
)
|
)
|
||||||
def test_issue156_undo_staticmethod(Sample: "Type[Sample]") -> None:
|
def test_issue156_undo_staticmethod(Sample: Type[Sample]) -> None:
|
||||||
monkeypatch = MonkeyPatch()
|
monkeypatch = MonkeyPatch()
|
||||||
|
|
||||||
monkeypatch.setattr(Sample, "hello", None)
|
monkeypatch.setattr(Sample, "hello", None)
|
||||||
|
|
|
@ -5,7 +5,7 @@ import types
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
from typing import List
|
from typing import List
|
||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
from typing import TYPE_CHECKING
|
from typing import Type
|
||||||
|
|
||||||
import py
|
import py
|
||||||
|
|
||||||
|
@ -17,9 +17,6 @@ from _pytest import runner
|
||||||
from _pytest.config import ExitCode
|
from _pytest.config import ExitCode
|
||||||
from _pytest.outcomes import OutcomeException
|
from _pytest.outcomes import OutcomeException
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
|
||||||
from typing import Type
|
|
||||||
|
|
||||||
|
|
||||||
class TestSetupState:
|
class TestSetupState:
|
||||||
def test_setup(self, testdir) -> None:
|
def test_setup(self, testdir) -> None:
|
||||||
|
@ -457,7 +454,7 @@ reporttypes = [
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"reporttype", reporttypes, ids=[x.__name__ for x in reporttypes]
|
"reporttype", reporttypes, ids=[x.__name__ for x in reporttypes]
|
||||||
)
|
)
|
||||||
def test_report_extra_parameters(reporttype: "Type[reports.BaseReport]") -> None:
|
def test_report_extra_parameters(reporttype: Type[reports.BaseReport]) -> None:
|
||||||
args = list(inspect.signature(reporttype.__init__).parameters.keys())[1:]
|
args = list(inspect.signature(reporttype.__init__).parameters.keys())[1:]
|
||||||
basekw = dict.fromkeys(args, []) # type: Dict[str, List[object]]
|
basekw = dict.fromkeys(args, []) # type: Dict[str, List[object]]
|
||||||
report = reporttype(newthing=1, **basekw)
|
report = reporttype(newthing=1, **basekw)
|
||||||
|
|
Loading…
Reference in New Issue