Merge pull request #11896 from nicoddemus/isort
Replace reorder-python-imports by isort due to black incompatibility
This commit is contained in:
		
						commit
						de161f8791
					
				| 
						 | 
					@ -26,3 +26,6 @@ afc607cfd81458d4e4f3b1f3cf8cc931b933907e
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# move argument parser to own file
 | 
					# move argument parser to own file
 | 
				
			||||||
c9df77cbd6a365dcb73c39618e4842711817e871
 | 
					c9df77cbd6a365dcb73c39618e4842711817e871
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Replace reorder-python-imports by isort due to black incompatibility (#11896)
 | 
				
			||||||
 | 
					8b54596639f41dfac070030ef20394b9001fe63c
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
repos:
 | 
					repos:
 | 
				
			||||||
-   repo: https://github.com/psf/black
 | 
					-   repo: https://github.com/psf/black
 | 
				
			||||||
    rev: 23.12.1
 | 
					    rev: 24.1.1
 | 
				
			||||||
    hooks:
 | 
					    hooks:
 | 
				
			||||||
    -   id: black
 | 
					    -   id: black
 | 
				
			||||||
        args: [--safe, --quiet]
 | 
					        args: [--safe, --quiet]
 | 
				
			||||||
| 
						 | 
					@ -36,11 +36,12 @@ repos:
 | 
				
			||||||
        additional_dependencies:
 | 
					        additional_dependencies:
 | 
				
			||||||
          - flake8-typing-imports==1.12.0
 | 
					          - flake8-typing-imports==1.12.0
 | 
				
			||||||
          - flake8-docstrings==1.5.0
 | 
					          - flake8-docstrings==1.5.0
 | 
				
			||||||
-   repo: https://github.com/asottile/reorder-python-imports
 | 
					-   repo: https://github.com/pycqa/isort
 | 
				
			||||||
    rev: v3.12.0
 | 
					    rev: 5.13.2
 | 
				
			||||||
    hooks:
 | 
					    hooks:
 | 
				
			||||||
    -   id: reorder-python-imports
 | 
					      - id: isort
 | 
				
			||||||
        args: ['--application-directories=.:src', --py38-plus]
 | 
					        name: isort
 | 
				
			||||||
 | 
					        args: [--force-single-line, --profile=black]
 | 
				
			||||||
-   repo: https://github.com/asottile/pyupgrade
 | 
					-   repo: https://github.com/asottile/pyupgrade
 | 
				
			||||||
    rev: v3.15.0
 | 
					    rev: v3.15.0
 | 
				
			||||||
    hooks:
 | 
					    hooks:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,9 +2,10 @@ import sys
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if __name__ == "__main__":
 | 
					if __name__ == "__main__":
 | 
				
			||||||
    import cProfile
 | 
					    import cProfile
 | 
				
			||||||
    import pytest  # NOQA
 | 
					 | 
				
			||||||
    import pstats
 | 
					    import pstats
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    import pytest  # NOQA
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    script = sys.argv[1:] if len(sys.argv) > 1 else ["empty.py"]
 | 
					    script = sys.argv[1:] if len(sys.argv) > 1 else ["empty.py"]
 | 
				
			||||||
    cProfile.run("pytest.cmdline.main(%r)" % script, "prof")
 | 
					    cProfile.run("pytest.cmdline.main(%r)" % script, "prof")
 | 
				
			||||||
    p = pstats.Stats("prof")
 | 
					    p = pstats.Stats("prof")
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -440,9 +440,10 @@ intersphinx_mapping = {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def configure_logging(app: "sphinx.application.Sphinx") -> None:
 | 
					def configure_logging(app: "sphinx.application.Sphinx") -> None:
 | 
				
			||||||
    """Configure Sphinx's WarningHandler to handle (expected) missing include."""
 | 
					    """Configure Sphinx's WarningHandler to handle (expected) missing include."""
 | 
				
			||||||
    import sphinx.util.logging
 | 
					 | 
				
			||||||
    import logging
 | 
					    import logging
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    import sphinx.util.logging
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    class WarnLogFilter(logging.Filter):
 | 
					    class WarnLogFilter(logging.Filter):
 | 
				
			||||||
        def filter(self, record: logging.LogRecord) -> bool:
 | 
					        def filter(self, record: logging.LogRecord) -> bool:
 | 
				
			||||||
            """Ignore warnings about missing include with "only" directive.
 | 
					            """Ignore warnings about missing include with "only" directive.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,12 +1,12 @@
 | 
				
			||||||
"""Module containing a parametrized tests testing cross-python serialization
 | 
					"""Module containing a parametrized tests testing cross-python serialization
 | 
				
			||||||
via the pickle module."""
 | 
					via the pickle module."""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import shutil
 | 
					import shutil
 | 
				
			||||||
import subprocess
 | 
					import subprocess
 | 
				
			||||||
import textwrap
 | 
					import textwrap
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import pytest
 | 
					import pytest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
pythonlist = ["python3.9", "python3.10", "python3.11"]
 | 
					pythonlist = ["python3.9", "python3.10", "python3.11"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,7 +19,6 @@ from requests_cache import OriginalResponse
 | 
				
			||||||
from requests_cache import SQLiteCache
 | 
					from requests_cache import SQLiteCache
 | 
				
			||||||
from tqdm import tqdm
 | 
					from tqdm import tqdm
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
FILE_HEAD = r"""
 | 
					FILE_HEAD = r"""
 | 
				
			||||||
.. Note this file is autogenerated by scripts/update-plugin-list.py - usually weekly via github action
 | 
					.. Note this file is autogenerated by scripts/update-plugin-list.py - usually weekly via github action
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,8 @@
 | 
				
			||||||
__all__ = ["__version__", "version_tuple"]
 | 
					__all__ = ["__version__", "version_tuple"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
try:
 | 
					try:
 | 
				
			||||||
    from ._version import version as __version__, version_tuple
 | 
					    from ._version import version as __version__
 | 
				
			||||||
 | 
					    from ._version import version_tuple
 | 
				
			||||||
except ImportError:  # pragma: no cover
 | 
					except ImportError:  # pragma: no cover
 | 
				
			||||||
    # broken installation, we don't even try
 | 
					    # broken installation, we don't even try
 | 
				
			||||||
    # unknown only works because we do poor mans version compare
 | 
					    # unknown only works because we do poor mans version compare
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -61,6 +61,7 @@ If things do not work right away:
 | 
				
			||||||
  which should throw a KeyError: 'COMPLINE' (which is properly set by the
 | 
					  which should throw a KeyError: 'COMPLINE' (which is properly set by the
 | 
				
			||||||
  global argcomplete script).
 | 
					  global argcomplete script).
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import argparse
 | 
					import argparse
 | 
				
			||||||
import os
 | 
					import os
 | 
				
			||||||
import sys
 | 
					import sys
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,5 @@
 | 
				
			||||||
"""Python inspection/code generation API."""
 | 
					"""Python inspection/code generation API."""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from .code import Code
 | 
					from .code import Code
 | 
				
			||||||
from .code import ExceptionInfo
 | 
					from .code import ExceptionInfo
 | 
				
			||||||
from .code import filter_traceback
 | 
					from .code import filter_traceback
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -278,9 +278,9 @@ class TracebackEntry:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Mostly for internal use.
 | 
					        Mostly for internal use.
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        tbh: Union[
 | 
					        tbh: Union[bool, Callable[[Optional[ExceptionInfo[BaseException]]], bool]] = (
 | 
				
			||||||
            bool, Callable[[Optional[ExceptionInfo[BaseException]]], bool]
 | 
					            False
 | 
				
			||||||
        ] = False
 | 
					        )
 | 
				
			||||||
        for maybe_ns_dct in (self.frame.f_locals, self.frame.f_globals):
 | 
					        for maybe_ns_dct in (self.frame.f_locals, self.frame.f_globals):
 | 
				
			||||||
            # in normal cases, f_locals and f_globals are dictionaries
 | 
					            # in normal cases, f_locals and f_globals are dictionaries
 | 
				
			||||||
            # however via `exec(...)` / `eval(...)` they can be other types
 | 
					            # however via `exec(...)` / `eval(...)` they can be other types
 | 
				
			||||||
| 
						 | 
					@ -377,12 +377,10 @@ class Traceback(List[TracebackEntry]):
 | 
				
			||||||
        return self
 | 
					        return self
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @overload
 | 
					    @overload
 | 
				
			||||||
    def __getitem__(self, key: "SupportsIndex") -> TracebackEntry:
 | 
					    def __getitem__(self, key: "SupportsIndex") -> TracebackEntry: ...
 | 
				
			||||||
        ...
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @overload
 | 
					    @overload
 | 
				
			||||||
    def __getitem__(self, key: slice) -> "Traceback":
 | 
					    def __getitem__(self, key: slice) -> "Traceback": ...
 | 
				
			||||||
        ...
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __getitem__(
 | 
					    def __getitem__(
 | 
				
			||||||
        self, key: Union["SupportsIndex", slice]
 | 
					        self, key: Union["SupportsIndex", slice]
 | 
				
			||||||
| 
						 | 
					@ -1056,13 +1054,13 @@ class FormattedExcinfo:
 | 
				
			||||||
                # full support for exception groups added to ExceptionInfo.
 | 
					                # full support for exception groups added to ExceptionInfo.
 | 
				
			||||||
                # See https://github.com/pytest-dev/pytest/issues/9159
 | 
					                # See https://github.com/pytest-dev/pytest/issues/9159
 | 
				
			||||||
                if isinstance(e, BaseExceptionGroup):
 | 
					                if isinstance(e, BaseExceptionGroup):
 | 
				
			||||||
                    reprtraceback: Union[
 | 
					                    reprtraceback: Union[ReprTracebackNative, ReprTraceback] = (
 | 
				
			||||||
                        ReprTracebackNative, ReprTraceback
 | 
					                        ReprTracebackNative(
 | 
				
			||||||
                    ] = ReprTracebackNative(
 | 
					                            traceback.format_exception(
 | 
				
			||||||
                        traceback.format_exception(
 | 
					                                type(excinfo_.value),
 | 
				
			||||||
                            type(excinfo_.value),
 | 
					                                excinfo_.value,
 | 
				
			||||||
                            excinfo_.value,
 | 
					                                excinfo_.traceback[0]._rawentry,
 | 
				
			||||||
                            excinfo_.traceback[0]._rawentry,
 | 
					                            )
 | 
				
			||||||
                        )
 | 
					                        )
 | 
				
			||||||
                    )
 | 
					                    )
 | 
				
			||||||
                else:
 | 
					                else:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -47,12 +47,10 @@ class Source:
 | 
				
			||||||
    __hash__ = None  # type: ignore
 | 
					    __hash__ = None  # type: ignore
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @overload
 | 
					    @overload
 | 
				
			||||||
    def __getitem__(self, key: int) -> str:
 | 
					    def __getitem__(self, key: int) -> str: ...
 | 
				
			||||||
        ...
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @overload
 | 
					    @overload
 | 
				
			||||||
    def __getitem__(self, key: slice) -> "Source":
 | 
					    def __getitem__(self, key: slice) -> "Source": ...
 | 
				
			||||||
        ...
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __getitem__(self, key: Union[int, slice]) -> Union[str, "Source"]:
 | 
					    def __getitem__(self, key: Union[int, slice]) -> Union[str, "Source"]:
 | 
				
			||||||
        if isinstance(key, int):
 | 
					        if isinstance(key, int):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,6 @@
 | 
				
			||||||
from .terminalwriter import get_terminal_width
 | 
					from .terminalwriter import get_terminal_width
 | 
				
			||||||
from .terminalwriter import TerminalWriter
 | 
					from .terminalwriter import TerminalWriter
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
__all__ = [
 | 
					__all__ = [
 | 
				
			||||||
    "TerminalWriter",
 | 
					    "TerminalWriter",
 | 
				
			||||||
    "get_terminal_width",
 | 
					    "get_terminal_width",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,5 @@
 | 
				
			||||||
"""Helper functions for writing to terminals and files."""
 | 
					"""Helper functions for writing to terminals and files."""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import os
 | 
					import os
 | 
				
			||||||
import shutil
 | 
					import shutil
 | 
				
			||||||
import sys
 | 
					import sys
 | 
				
			||||||
| 
						 | 
					@ -10,7 +11,6 @@ from typing import TextIO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from .wcwidth import wcswidth
 | 
					from .wcwidth import wcswidth
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
# This code was initially copied from py 1.8.1, file _io/terminalwriter.py.
 | 
					# This code was initially copied from py 1.8.1, file _io/terminalwriter.py.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -210,8 +210,8 @@ class TerminalWriter:
 | 
				
			||||||
                from pygments.lexers.python import PythonLexer as Lexer
 | 
					                from pygments.lexers.python import PythonLexer as Lexer
 | 
				
			||||||
            elif lexer == "diff":
 | 
					            elif lexer == "diff":
 | 
				
			||||||
                from pygments.lexers.diff import DiffLexer as Lexer
 | 
					                from pygments.lexers.diff import DiffLexer as Lexer
 | 
				
			||||||
            from pygments import highlight
 | 
					 | 
				
			||||||
            import pygments.util
 | 
					            import pygments.util
 | 
				
			||||||
 | 
					            from pygments import highlight
 | 
				
			||||||
        except ImportError:
 | 
					        except ImportError:
 | 
				
			||||||
            return source
 | 
					            return source
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,5 @@
 | 
				
			||||||
"""create errno-specific classes for IO or os calls."""
 | 
					"""create errno-specific classes for IO or os calls."""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from __future__ import annotations
 | 
					from __future__ import annotations
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import errno
 | 
					import errno
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -204,12 +204,10 @@ class Stat:
 | 
				
			||||||
    if TYPE_CHECKING:
 | 
					    if TYPE_CHECKING:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        @property
 | 
					        @property
 | 
				
			||||||
        def size(self) -> int:
 | 
					        def size(self) -> int: ...
 | 
				
			||||||
            ...
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        @property
 | 
					        @property
 | 
				
			||||||
        def mtime(self) -> float:
 | 
					        def mtime(self) -> float: ...
 | 
				
			||||||
            ...
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __getattr__(self, name: str) -> Any:
 | 
					    def __getattr__(self, name: str) -> Any:
 | 
				
			||||||
        return getattr(self._osstatresult, "st_" + name)
 | 
					        return getattr(self._osstatresult, "st_" + name)
 | 
				
			||||||
| 
						 | 
					@ -962,12 +960,10 @@ class LocalPath:
 | 
				
			||||||
            return p
 | 
					            return p
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @overload
 | 
					    @overload
 | 
				
			||||||
    def stat(self, raising: Literal[True] = ...) -> Stat:
 | 
					    def stat(self, raising: Literal[True] = ...) -> Stat: ...
 | 
				
			||||||
        ...
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @overload
 | 
					    @overload
 | 
				
			||||||
    def stat(self, raising: Literal[False]) -> Stat | None:
 | 
					    def stat(self, raising: Literal[False]) -> Stat | None: ...
 | 
				
			||||||
        ...
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def stat(self, raising: bool = True) -> Stat | None:
 | 
					    def stat(self, raising: bool = True) -> Stat | None:
 | 
				
			||||||
        """Return an os.stat() tuple."""
 | 
					        """Return an os.stat() tuple."""
 | 
				
			||||||
| 
						 | 
					@ -1168,7 +1164,8 @@ class LocalPath:
 | 
				
			||||||
        where the 'self' path points to executable.
 | 
					        where the 'self' path points to executable.
 | 
				
			||||||
        The process is directly invoked and not through a system shell.
 | 
					        The process is directly invoked and not through a system shell.
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        from subprocess import Popen, PIPE
 | 
					        from subprocess import PIPE
 | 
				
			||||||
 | 
					        from subprocess import Popen
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        popen_opts.pop("stdout", None)
 | 
					        popen_opts.pop("stdout", None)
 | 
				
			||||||
        popen_opts.pop("stderr", None)
 | 
					        popen_opts.pop("stderr", None)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,5 @@
 | 
				
			||||||
"""Rewrite assertion AST to produce nice error messages."""
 | 
					"""Rewrite assertion AST to produce nice error messages."""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import ast
 | 
					import ast
 | 
				
			||||||
import errno
 | 
					import errno
 | 
				
			||||||
import functools
 | 
					import functools
 | 
				
			||||||
| 
						 | 
					@ -33,15 +34,16 @@ from _pytest._io.saferepr import DEFAULT_REPR_MAX_SIZE
 | 
				
			||||||
from _pytest._io.saferepr import saferepr
 | 
					from _pytest._io.saferepr import saferepr
 | 
				
			||||||
from _pytest._version import version
 | 
					from _pytest._version import version
 | 
				
			||||||
from _pytest.assertion import util
 | 
					from _pytest.assertion import util
 | 
				
			||||||
from _pytest.assertion.util import (  # noqa: F401
 | 
					 | 
				
			||||||
    format_explanation as _format_explanation,
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
from _pytest.config import Config
 | 
					from _pytest.config import Config
 | 
				
			||||||
from _pytest.main import Session
 | 
					from _pytest.main import Session
 | 
				
			||||||
from _pytest.pathlib import absolutepath
 | 
					from _pytest.pathlib import absolutepath
 | 
				
			||||||
from _pytest.pathlib import fnmatch_ex
 | 
					from _pytest.pathlib import fnmatch_ex
 | 
				
			||||||
from _pytest.stash import StashKey
 | 
					from _pytest.stash import StashKey
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# fmt: off
 | 
				
			||||||
 | 
					from _pytest.assertion.util import format_explanation as _format_explanation  # noqa:F401, isort:skip
 | 
				
			||||||
 | 
					# fmt:on
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if TYPE_CHECKING:
 | 
					if TYPE_CHECKING:
 | 
				
			||||||
    from _pytest.assertion import AssertionState
 | 
					    from _pytest.assertion import AssertionState
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -669,9 +671,9 @@ class AssertionRewriter(ast.NodeVisitor):
 | 
				
			||||||
            self.enable_assertion_pass_hook = False
 | 
					            self.enable_assertion_pass_hook = False
 | 
				
			||||||
        self.source = source
 | 
					        self.source = source
 | 
				
			||||||
        self.scope: tuple[ast.AST, ...] = ()
 | 
					        self.scope: tuple[ast.AST, ...] = ()
 | 
				
			||||||
        self.variables_overwrite: defaultdict[
 | 
					        self.variables_overwrite: defaultdict[tuple[ast.AST, ...], Dict[str, str]] = (
 | 
				
			||||||
            tuple[ast.AST, ...], Dict[str, str]
 | 
					            defaultdict(dict)
 | 
				
			||||||
        ] = defaultdict(dict)
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def run(self, mod: ast.Module) -> None:
 | 
					    def run(self, mod: ast.Module) -> None:
 | 
				
			||||||
        """Find all assert statements in *mod* and rewrite them."""
 | 
					        """Find all assert statements in *mod* and rewrite them."""
 | 
				
			||||||
| 
						 | 
					@ -858,9 +860,10 @@ class AssertionRewriter(ast.NodeVisitor):
 | 
				
			||||||
        the expression is false.
 | 
					        the expression is false.
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        if isinstance(assert_.test, ast.Tuple) and len(assert_.test.elts) >= 1:
 | 
					        if isinstance(assert_.test, ast.Tuple) and len(assert_.test.elts) >= 1:
 | 
				
			||||||
            from _pytest.warning_types import PytestAssertRewriteWarning
 | 
					 | 
				
			||||||
            import warnings
 | 
					            import warnings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            from _pytest.warning_types import PytestAssertRewriteWarning
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            # TODO: This assert should not be needed.
 | 
					            # TODO: This assert should not be needed.
 | 
				
			||||||
            assert self.module_path is not None
 | 
					            assert self.module_path is not None
 | 
				
			||||||
            warnings.warn_explicit(
 | 
					            warnings.warn_explicit(
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,6 +3,7 @@
 | 
				
			||||||
Current default behaviour is to truncate assertion explanations at
 | 
					Current default behaviour is to truncate assertion explanations at
 | 
				
			||||||
terminal lines, unless running with an assertions verbosity level of at least 2 or running on CI.
 | 
					terminal lines, unless running with an assertions verbosity level of at least 2 or running on CI.
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from typing import List
 | 
					from typing import List
 | 
				
			||||||
from typing import Optional
 | 
					from typing import Optional
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,7 +11,6 @@ from _pytest.assertion import util
 | 
				
			||||||
from _pytest.config import Config
 | 
					from _pytest.config import Config
 | 
				
			||||||
from _pytest.nodes import Item
 | 
					from _pytest.nodes import Item
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
DEFAULT_MAX_LINES = 8
 | 
					DEFAULT_MAX_LINES = 8
 | 
				
			||||||
DEFAULT_MAX_CHARS = 8 * 80
 | 
					DEFAULT_MAX_CHARS = 8 * 80
 | 
				
			||||||
USAGE_MSG = "use '-vv' to show"
 | 
					USAGE_MSG = "use '-vv' to show"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -112,6 +112,7 @@ class Cache:
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        check_ispytest(_ispytest)
 | 
					        check_ispytest(_ispytest)
 | 
				
			||||||
        import warnings
 | 
					        import warnings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        from _pytest.warning_types import PytestCacheWarning
 | 
					        from _pytest.warning_types import PytestCacheWarning
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        warnings.warn(
 | 
					        warnings.warn(
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,7 +17,6 @@ from typing import Final
 | 
				
			||||||
from typing import NoReturn
 | 
					from typing import NoReturn
 | 
				
			||||||
from typing import TypeVar
 | 
					from typing import TypeVar
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
_T = TypeVar("_T")
 | 
					_T = TypeVar("_T")
 | 
				
			||||||
_S = TypeVar("_S")
 | 
					_S = TypeVar("_S")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -66,9 +66,10 @@ from _pytest.warning_types import PytestConfigWarning
 | 
				
			||||||
from _pytest.warning_types import warn_explicit_for
 | 
					from _pytest.warning_types import warn_explicit_for
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if TYPE_CHECKING:
 | 
					if TYPE_CHECKING:
 | 
				
			||||||
 | 
					    from .argparsing import Argument
 | 
				
			||||||
 | 
					    from .argparsing import Parser
 | 
				
			||||||
    from _pytest._code.code import _TracebackStyle
 | 
					    from _pytest._code.code import _TracebackStyle
 | 
				
			||||||
    from _pytest.terminal import TerminalReporter
 | 
					    from _pytest.terminal import TerminalReporter
 | 
				
			||||||
    from .argparsing import Argument, Parser
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
_PluggyPlugin = object
 | 
					_PluggyPlugin = object
 | 
				
			||||||
| 
						 | 
					@ -973,7 +974,8 @@ class Config:
 | 
				
			||||||
        *,
 | 
					        *,
 | 
				
			||||||
        invocation_params: Optional[InvocationParams] = None,
 | 
					        invocation_params: Optional[InvocationParams] = None,
 | 
				
			||||||
    ) -> None:
 | 
					    ) -> None:
 | 
				
			||||||
        from .argparsing import Parser, FILE_OR_DIR
 | 
					        from .argparsing import FILE_OR_DIR
 | 
				
			||||||
 | 
					        from .argparsing import Parser
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if invocation_params is None:
 | 
					        if invocation_params is None:
 | 
				
			||||||
            invocation_params = self.InvocationParams(
 | 
					            invocation_params = self.InvocationParams(
 | 
				
			||||||
| 
						 | 
					@ -1390,8 +1392,9 @@ class Config:
 | 
				
			||||||
            return
 | 
					            return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Imported lazily to improve start-up time.
 | 
					        # Imported lazily to improve start-up time.
 | 
				
			||||||
 | 
					        from packaging.requirements import InvalidRequirement
 | 
				
			||||||
 | 
					        from packaging.requirements import Requirement
 | 
				
			||||||
        from packaging.version import Version
 | 
					        from packaging.version import Version
 | 
				
			||||||
        from packaging.requirements import InvalidRequirement, Requirement
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        plugin_info = self.pluginmanager.list_plugin_distinfo()
 | 
					        plugin_info = self.pluginmanager.list_plugin_distinfo()
 | 
				
			||||||
        plugin_dist_info = {dist.project_name: dist.version for _, dist in plugin_info}
 | 
					        plugin_dist_info = {dist.project_name: dist.version for _, dist in plugin_info}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,6 +8,7 @@ All constants defined in this module should be either instances of
 | 
				
			||||||
:class:`PytestWarning`, or :class:`UnformattedWarning`
 | 
					:class:`PytestWarning`, or :class:`UnformattedWarning`
 | 
				
			||||||
in case of warnings which need to format their messages.
 | 
					in case of warnings which need to format their messages.
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from warnings import warn
 | 
					from warnings import warn
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from _pytest.warning_types import PytestDeprecationWarning
 | 
					from _pytest.warning_types import PytestDeprecationWarning
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,7 +8,6 @@ from _pytest.config.argparsing import Parser
 | 
				
			||||||
from _pytest.nodes import Item
 | 
					from _pytest.nodes import Item
 | 
				
			||||||
from _pytest.stash import StashKey
 | 
					from _pytest.stash import StashKey
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
fault_handler_original_stderr_fd_key = StashKey[int]()
 | 
					fault_handler_original_stderr_fd_key = StashKey[int]()
 | 
				
			||||||
fault_handler_stderr_fd_key = StashKey[int]()
 | 
					fault_handler_stderr_fd_key = StashKey[int]()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -67,7 +67,6 @@ from _pytest.scope import _ScopeName
 | 
				
			||||||
from _pytest.scope import HIGH_SCOPES
 | 
					from _pytest.scope import HIGH_SCOPES
 | 
				
			||||||
from _pytest.scope import Scope
 | 
					from _pytest.scope import Scope
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
if TYPE_CHECKING:
 | 
					if TYPE_CHECKING:
 | 
				
			||||||
    from typing import Deque
 | 
					    from typing import Deque
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1231,8 +1230,7 @@ def fixture(
 | 
				
			||||||
        Union[Sequence[Optional[object]], Callable[[Any], Optional[object]]]
 | 
					        Union[Sequence[Optional[object]], Callable[[Any], Optional[object]]]
 | 
				
			||||||
    ] = ...,
 | 
					    ] = ...,
 | 
				
			||||||
    name: Optional[str] = ...,
 | 
					    name: Optional[str] = ...,
 | 
				
			||||||
) -> FixtureFunction:
 | 
					) -> FixtureFunction: ...
 | 
				
			||||||
    ...
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@overload
 | 
					@overload
 | 
				
			||||||
| 
						 | 
					@ -1246,8 +1244,7 @@ def fixture(  # noqa: F811
 | 
				
			||||||
        Union[Sequence[Optional[object]], Callable[[Any], Optional[object]]]
 | 
					        Union[Sequence[Optional[object]], Callable[[Any], Optional[object]]]
 | 
				
			||||||
    ] = ...,
 | 
					    ] = ...,
 | 
				
			||||||
    name: Optional[str] = None,
 | 
					    name: Optional[str] = None,
 | 
				
			||||||
) -> FixtureFunctionMarker:
 | 
					) -> FixtureFunctionMarker: ...
 | 
				
			||||||
    ...
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def fixture(  # noqa: F811
 | 
					def fixture(  # noqa: F811
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,6 @@
 | 
				
			||||||
"""Provides a function to report all internal modules for using freezing
 | 
					"""Provides a function to report all internal modules for using freezing
 | 
				
			||||||
tools."""
 | 
					tools."""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import types
 | 
					import types
 | 
				
			||||||
from typing import Iterator
 | 
					from typing import Iterator
 | 
				
			||||||
from typing import List
 | 
					from typing import List
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,12 +19,12 @@ if TYPE_CHECKING:
 | 
				
			||||||
    import warnings
 | 
					    import warnings
 | 
				
			||||||
    from typing import Literal
 | 
					    from typing import Literal
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    from _pytest._code.code import ExceptionRepr
 | 
					 | 
				
			||||||
    from _pytest._code.code import ExceptionInfo
 | 
					    from _pytest._code.code import ExceptionInfo
 | 
				
			||||||
 | 
					    from _pytest._code.code import ExceptionRepr
 | 
				
			||||||
 | 
					    from _pytest.config import _PluggyPlugin
 | 
				
			||||||
    from _pytest.config import Config
 | 
					    from _pytest.config import Config
 | 
				
			||||||
    from _pytest.config import ExitCode
 | 
					    from _pytest.config import ExitCode
 | 
				
			||||||
    from _pytest.config import PytestPluginManager
 | 
					    from _pytest.config import PytestPluginManager
 | 
				
			||||||
    from _pytest.config import _PluggyPlugin
 | 
					 | 
				
			||||||
    from _pytest.config.argparsing import Parser
 | 
					    from _pytest.config.argparsing import Parser
 | 
				
			||||||
    from _pytest.fixtures import FixtureDef
 | 
					    from _pytest.fixtures import FixtureDef
 | 
				
			||||||
    from _pytest.fixtures import SubRequest
 | 
					    from _pytest.fixtures import SubRequest
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -34,7 +34,6 @@ from _pytest.reports import TestReport
 | 
				
			||||||
from _pytest.stash import StashKey
 | 
					from _pytest.stash import StashKey
 | 
				
			||||||
from _pytest.terminal import TerminalReporter
 | 
					from _pytest.terminal import TerminalReporter
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
xml_key = StashKey["LogXML"]()
 | 
					xml_key = StashKey["LogXML"]()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,6 +15,7 @@ from typing import Union
 | 
				
			||||||
from iniconfig import SectionWrapper
 | 
					from iniconfig import SectionWrapper
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import py
 | 
					import py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from _pytest.cacheprovider import Cache
 | 
					from _pytest.cacheprovider import Cache
 | 
				
			||||||
from _pytest.config import Config
 | 
					from _pytest.config import Config
 | 
				
			||||||
from _pytest.config import hookimpl
 | 
					from _pytest.config import hookimpl
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,5 @@
 | 
				
			||||||
"""Core implementation of the testing process: init, session, runtest loop."""
 | 
					"""Core implementation of the testing process: init, session, runtest loop."""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import argparse
 | 
					import argparse
 | 
				
			||||||
import dataclasses
 | 
					import dataclasses
 | 
				
			||||||
import fnmatch
 | 
					import fnmatch
 | 
				
			||||||
| 
						 | 
					@ -721,14 +722,12 @@ class Session(nodes.Collector):
 | 
				
			||||||
    @overload
 | 
					    @overload
 | 
				
			||||||
    def perform_collect(
 | 
					    def perform_collect(
 | 
				
			||||||
        self, args: Optional[Sequence[str]] = ..., genitems: "Literal[True]" = ...
 | 
					        self, args: Optional[Sequence[str]] = ..., genitems: "Literal[True]" = ...
 | 
				
			||||||
    ) -> Sequence[nodes.Item]:
 | 
					    ) -> Sequence[nodes.Item]: ...
 | 
				
			||||||
        ...
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @overload
 | 
					    @overload
 | 
				
			||||||
    def perform_collect(  # noqa: F811
 | 
					    def perform_collect(  # noqa: F811
 | 
				
			||||||
        self, args: Optional[Sequence[str]] = ..., genitems: bool = ...
 | 
					        self, args: Optional[Sequence[str]] = ..., genitems: bool = ...
 | 
				
			||||||
    ) -> Sequence[Union[nodes.Item, nodes.Collector]]:
 | 
					    ) -> Sequence[Union[nodes.Item, nodes.Collector]]: ...
 | 
				
			||||||
        ...
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def perform_collect(  # noqa: F811
 | 
					    def perform_collect(  # noqa: F811
 | 
				
			||||||
        self, args: Optional[Sequence[str]] = None, genitems: bool = True
 | 
					        self, args: Optional[Sequence[str]] = None, genitems: bool = True
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,5 @@
 | 
				
			||||||
"""Generic mechanism for marking and selecting python functions."""
 | 
					"""Generic mechanism for marking and selecting python functions."""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import dataclasses
 | 
					import dataclasses
 | 
				
			||||||
from typing import AbstractSet
 | 
					from typing import AbstractSet
 | 
				
			||||||
from typing import Collection
 | 
					from typing import Collection
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -14,6 +14,7 @@ The semantics are:
 | 
				
			||||||
- ident evaluates to True of False according to a provided matcher function.
 | 
					- ident evaluates to True of False according to a provided matcher function.
 | 
				
			||||||
- or/and/not evaluate according to the usual boolean semantics.
 | 
					- or/and/not evaluate according to the usual boolean semantics.
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import ast
 | 
					import ast
 | 
				
			||||||
import dataclasses
 | 
					import dataclasses
 | 
				
			||||||
import enum
 | 
					import enum
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -434,12 +434,10 @@ if TYPE_CHECKING:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    class _SkipMarkDecorator(MarkDecorator):
 | 
					    class _SkipMarkDecorator(MarkDecorator):
 | 
				
			||||||
        @overload  # type: ignore[override,misc,no-overload-impl]
 | 
					        @overload  # type: ignore[override,misc,no-overload-impl]
 | 
				
			||||||
        def __call__(self, arg: Markable) -> Markable:
 | 
					        def __call__(self, arg: Markable) -> Markable: ...
 | 
				
			||||||
            ...
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        @overload
 | 
					        @overload
 | 
				
			||||||
        def __call__(self, reason: str = ...) -> "MarkDecorator":
 | 
					        def __call__(self, reason: str = ...) -> "MarkDecorator": ...
 | 
				
			||||||
            ...
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    class _SkipifMarkDecorator(MarkDecorator):
 | 
					    class _SkipifMarkDecorator(MarkDecorator):
 | 
				
			||||||
        def __call__(  # type: ignore[override]
 | 
					        def __call__(  # type: ignore[override]
 | 
				
			||||||
| 
						 | 
					@ -447,13 +445,11 @@ if TYPE_CHECKING:
 | 
				
			||||||
            condition: Union[str, bool] = ...,
 | 
					            condition: Union[str, bool] = ...,
 | 
				
			||||||
            *conditions: Union[str, bool],
 | 
					            *conditions: Union[str, bool],
 | 
				
			||||||
            reason: str = ...,
 | 
					            reason: str = ...,
 | 
				
			||||||
        ) -> MarkDecorator:
 | 
					        ) -> MarkDecorator: ...
 | 
				
			||||||
            ...
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    class _XfailMarkDecorator(MarkDecorator):
 | 
					    class _XfailMarkDecorator(MarkDecorator):
 | 
				
			||||||
        @overload  # type: ignore[override,misc,no-overload-impl]
 | 
					        @overload  # type: ignore[override,misc,no-overload-impl]
 | 
				
			||||||
        def __call__(self, arg: Markable) -> Markable:
 | 
					        def __call__(self, arg: Markable) -> Markable: ...
 | 
				
			||||||
            ...
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        @overload
 | 
					        @overload
 | 
				
			||||||
        def __call__(
 | 
					        def __call__(
 | 
				
			||||||
| 
						 | 
					@ -466,8 +462,7 @@ if TYPE_CHECKING:
 | 
				
			||||||
                None, Type[BaseException], Tuple[Type[BaseException], ...]
 | 
					                None, Type[BaseException], Tuple[Type[BaseException], ...]
 | 
				
			||||||
            ] = ...,
 | 
					            ] = ...,
 | 
				
			||||||
            strict: bool = ...,
 | 
					            strict: bool = ...,
 | 
				
			||||||
        ) -> MarkDecorator:
 | 
					        ) -> MarkDecorator: ...
 | 
				
			||||||
            ...
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    class _ParametrizeMarkDecorator(MarkDecorator):
 | 
					    class _ParametrizeMarkDecorator(MarkDecorator):
 | 
				
			||||||
        def __call__(  # type: ignore[override]
 | 
					        def __call__(  # type: ignore[override]
 | 
				
			||||||
| 
						 | 
					@ -483,8 +478,7 @@ if TYPE_CHECKING:
 | 
				
			||||||
                ]
 | 
					                ]
 | 
				
			||||||
            ] = ...,
 | 
					            ] = ...,
 | 
				
			||||||
            scope: Optional[_ScopeName] = ...,
 | 
					            scope: Optional[_ScopeName] = ...,
 | 
				
			||||||
        ) -> MarkDecorator:
 | 
					        ) -> MarkDecorator: ...
 | 
				
			||||||
            ...
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    class _UsefixturesMarkDecorator(MarkDecorator):
 | 
					    class _UsefixturesMarkDecorator(MarkDecorator):
 | 
				
			||||||
        def __call__(self, *fixtures: str) -> MarkDecorator:  # type: ignore[override]
 | 
					        def __call__(self, *fixtures: str) -> MarkDecorator:  # type: ignore[override]
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -169,8 +169,7 @@ class MonkeyPatch:
 | 
				
			||||||
        name: object,
 | 
					        name: object,
 | 
				
			||||||
        value: Notset = ...,
 | 
					        value: Notset = ...,
 | 
				
			||||||
        raising: bool = ...,
 | 
					        raising: bool = ...,
 | 
				
			||||||
    ) -> None:
 | 
					    ) -> None: ...
 | 
				
			||||||
        ...
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @overload
 | 
					    @overload
 | 
				
			||||||
    def setattr(
 | 
					    def setattr(
 | 
				
			||||||
| 
						 | 
					@ -179,8 +178,7 @@ class MonkeyPatch:
 | 
				
			||||||
        name: str,
 | 
					        name: str,
 | 
				
			||||||
        value: object,
 | 
					        value: object,
 | 
				
			||||||
        raising: bool = ...,
 | 
					        raising: bool = ...,
 | 
				
			||||||
    ) -> None:
 | 
					    ) -> None: ...
 | 
				
			||||||
        ...
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def setattr(
 | 
					    def setattr(
 | 
				
			||||||
        self,
 | 
					        self,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -41,8 +41,8 @@ from _pytest.warning_types import PytestWarning
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if TYPE_CHECKING:
 | 
					if TYPE_CHECKING:
 | 
				
			||||||
    # Imported here due to circular import.
 | 
					    # Imported here due to circular import.
 | 
				
			||||||
    from _pytest.main import Session
 | 
					 | 
				
			||||||
    from _pytest._code.code import _TracebackStyle
 | 
					    from _pytest._code.code import _TracebackStyle
 | 
				
			||||||
 | 
					    from _pytest.main import Session
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SEP = "/"
 | 
					SEP = "/"
 | 
				
			||||||
| 
						 | 
					@ -104,6 +104,7 @@ class Node(abc.ABC, metaclass=NodeMeta):
 | 
				
			||||||
    ``Collector``\'s are the internal nodes of the tree, and ``Item``\'s are the
 | 
					    ``Collector``\'s are the internal nodes of the tree, and ``Item``\'s are the
 | 
				
			||||||
    leaf nodes.
 | 
					    leaf nodes.
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Use __slots__ to make attribute access faster.
 | 
					    # Use __slots__ to make attribute access faster.
 | 
				
			||||||
    # Note that __dict__ is still available.
 | 
					    # Note that __dict__ is still available.
 | 
				
			||||||
    __slots__ = (
 | 
					    __slots__ = (
 | 
				
			||||||
| 
						 | 
					@ -325,12 +326,10 @@ class Node(abc.ABC, metaclass=NodeMeta):
 | 
				
			||||||
                    yield node, mark
 | 
					                    yield node, mark
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @overload
 | 
					    @overload
 | 
				
			||||||
    def get_closest_marker(self, name: str) -> Optional[Mark]:
 | 
					    def get_closest_marker(self, name: str) -> Optional[Mark]: ...
 | 
				
			||||||
        ...
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @overload
 | 
					    @overload
 | 
				
			||||||
    def get_closest_marker(self, name: str, default: Mark) -> Mark:
 | 
					    def get_closest_marker(self, name: str, default: Mark) -> Mark: ...
 | 
				
			||||||
        ...
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_closest_marker(
 | 
					    def get_closest_marker(
 | 
				
			||||||
        self, name: str, default: Optional[Mark] = None
 | 
					        self, name: str, default: Optional[Mark] = None
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,6 @@
 | 
				
			||||||
"""Exception classes and constants handling test outcomes as well as
 | 
					"""Exception classes and constants handling test outcomes as well as
 | 
				
			||||||
functions creating them."""
 | 
					functions creating them."""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import sys
 | 
					import sys
 | 
				
			||||||
from typing import Any
 | 
					from typing import Any
 | 
				
			||||||
from typing import Callable
 | 
					from typing import Callable
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,7 +12,6 @@ from _pytest.config.argparsing import Parser
 | 
				
			||||||
from _pytest.stash import StashKey
 | 
					from _pytest.stash import StashKey
 | 
				
			||||||
from _pytest.terminal import TerminalReporter
 | 
					from _pytest.terminal import TerminalReporter
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
pastebinfile_key = StashKey[IO[bytes]]()
 | 
					pastebinfile_key = StashKey[IO[bytes]]()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -74,8 +73,8 @@ def create_new_paste(contents: Union[str, bytes]) -> str:
 | 
				
			||||||
    :returns: URL to the pasted contents, or an error message.
 | 
					    :returns: URL to the pasted contents, or an error message.
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    import re
 | 
					    import re
 | 
				
			||||||
    from urllib.request import urlopen
 | 
					 | 
				
			||||||
    from urllib.parse import urlencode
 | 
					    from urllib.parse import urlencode
 | 
				
			||||||
 | 
					    from urllib.request import urlopen
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    params = {"code": contents, "lexer": "text", "expiry": "1week"}
 | 
					    params = {"code": contents, "lexer": "text", "expiry": "1week"}
 | 
				
			||||||
    url = "https://bpa.st"
 | 
					    url = "https://bpa.st"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -244,8 +244,7 @@ class RecordedHookCall:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if TYPE_CHECKING:
 | 
					    if TYPE_CHECKING:
 | 
				
			||||||
        # The class has undetermined attributes, this tells mypy about it.
 | 
					        # The class has undetermined attributes, this tells mypy about it.
 | 
				
			||||||
        def __getattr__(self, key: str):
 | 
					        def __getattr__(self, key: str): ...
 | 
				
			||||||
            ...
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@final
 | 
					@final
 | 
				
			||||||
| 
						 | 
					@ -326,15 +325,13 @@ class HookRecorder:
 | 
				
			||||||
    def getreports(
 | 
					    def getreports(
 | 
				
			||||||
        self,
 | 
					        self,
 | 
				
			||||||
        names: "Literal['pytest_collectreport']",
 | 
					        names: "Literal['pytest_collectreport']",
 | 
				
			||||||
    ) -> Sequence[CollectReport]:
 | 
					    ) -> Sequence[CollectReport]: ...
 | 
				
			||||||
        ...
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @overload
 | 
					    @overload
 | 
				
			||||||
    def getreports(
 | 
					    def getreports(
 | 
				
			||||||
        self,
 | 
					        self,
 | 
				
			||||||
        names: "Literal['pytest_runtest_logreport']",
 | 
					        names: "Literal['pytest_runtest_logreport']",
 | 
				
			||||||
    ) -> Sequence[TestReport]:
 | 
					    ) -> Sequence[TestReport]: ...
 | 
				
			||||||
        ...
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @overload
 | 
					    @overload
 | 
				
			||||||
    def getreports(
 | 
					    def getreports(
 | 
				
			||||||
| 
						 | 
					@ -343,8 +340,7 @@ class HookRecorder:
 | 
				
			||||||
            "pytest_collectreport",
 | 
					            "pytest_collectreport",
 | 
				
			||||||
            "pytest_runtest_logreport",
 | 
					            "pytest_runtest_logreport",
 | 
				
			||||||
        ),
 | 
					        ),
 | 
				
			||||||
    ) -> Sequence[Union[CollectReport, TestReport]]:
 | 
					    ) -> Sequence[Union[CollectReport, TestReport]]: ...
 | 
				
			||||||
        ...
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def getreports(
 | 
					    def getreports(
 | 
				
			||||||
        self,
 | 
					        self,
 | 
				
			||||||
| 
						 | 
					@ -391,15 +387,13 @@ class HookRecorder:
 | 
				
			||||||
    def getfailures(
 | 
					    def getfailures(
 | 
				
			||||||
        self,
 | 
					        self,
 | 
				
			||||||
        names: "Literal['pytest_collectreport']",
 | 
					        names: "Literal['pytest_collectreport']",
 | 
				
			||||||
    ) -> Sequence[CollectReport]:
 | 
					    ) -> Sequence[CollectReport]: ...
 | 
				
			||||||
        ...
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @overload
 | 
					    @overload
 | 
				
			||||||
    def getfailures(
 | 
					    def getfailures(
 | 
				
			||||||
        self,
 | 
					        self,
 | 
				
			||||||
        names: "Literal['pytest_runtest_logreport']",
 | 
					        names: "Literal['pytest_runtest_logreport']",
 | 
				
			||||||
    ) -> Sequence[TestReport]:
 | 
					    ) -> Sequence[TestReport]: ...
 | 
				
			||||||
        ...
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @overload
 | 
					    @overload
 | 
				
			||||||
    def getfailures(
 | 
					    def getfailures(
 | 
				
			||||||
| 
						 | 
					@ -408,8 +402,7 @@ class HookRecorder:
 | 
				
			||||||
            "pytest_collectreport",
 | 
					            "pytest_collectreport",
 | 
				
			||||||
            "pytest_runtest_logreport",
 | 
					            "pytest_runtest_logreport",
 | 
				
			||||||
        ),
 | 
					        ),
 | 
				
			||||||
    ) -> Sequence[Union[CollectReport, TestReport]]:
 | 
					    ) -> Sequence[Union[CollectReport, TestReport]]: ...
 | 
				
			||||||
        ...
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def getfailures(
 | 
					    def getfailures(
 | 
				
			||||||
        self,
 | 
					        self,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,5 @@
 | 
				
			||||||
"""Helper plugin for pytester; should not be loaded on its own."""
 | 
					"""Helper plugin for pytester; should not be loaded on its own."""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# This plugin contains assertions used by pytester. pytester cannot
 | 
					# This plugin contains assertions used by pytester. pytester cannot
 | 
				
			||||||
# contain them itself, since it is imported by the `pytest` module,
 | 
					# contain them itself, since it is imported by the `pytest` module,
 | 
				
			||||||
# hence cannot be subject to assertion rewriting, which requires a
 | 
					# hence cannot be subject to assertion rewriting, which requires a
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -81,7 +81,6 @@ from _pytest.warning_types import PytestCollectionWarning
 | 
				
			||||||
from _pytest.warning_types import PytestReturnNotNoneWarning
 | 
					from _pytest.warning_types import PytestReturnNotNoneWarning
 | 
				
			||||||
from _pytest.warning_types import PytestUnhandledCoroutineWarning
 | 
					from _pytest.warning_types import PytestUnhandledCoroutineWarning
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
_PYTEST_DIR = Path(_pytest.__file__).parent
 | 
					_PYTEST_DIR = Path(_pytest.__file__).parent
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1793,9 +1792,11 @@ class Function(PyobjMixin, nodes.Item):
 | 
				
			||||||
            if self.config.getoption("tbstyle", "auto") == "auto":
 | 
					            if self.config.getoption("tbstyle", "auto") == "auto":
 | 
				
			||||||
                if len(ntraceback) > 2:
 | 
					                if len(ntraceback) > 2:
 | 
				
			||||||
                    ntraceback = Traceback(
 | 
					                    ntraceback = Traceback(
 | 
				
			||||||
                        entry
 | 
					                        (
 | 
				
			||||||
                        if i == 0 or i == len(ntraceback) - 1
 | 
					                            entry
 | 
				
			||||||
                        else entry.with_repr_style("short")
 | 
					                            if i == 0 or i == len(ntraceback) - 1
 | 
				
			||||||
 | 
					                            else entry.with_repr_style("short")
 | 
				
			||||||
 | 
					                        )
 | 
				
			||||||
                        for i, entry in enumerate(ntraceback)
 | 
					                        for i, entry in enumerate(ntraceback)
 | 
				
			||||||
                    )
 | 
					                    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -779,8 +779,7 @@ 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]": ...
 | 
				
			||||||
    ...
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@overload
 | 
					@overload
 | 
				
			||||||
| 
						 | 
					@ -789,8 +788,7 @@ def raises(  # noqa: F811
 | 
				
			||||||
    func: Callable[..., Any],
 | 
					    func: Callable[..., Any],
 | 
				
			||||||
    *args: Any,
 | 
					    *args: Any,
 | 
				
			||||||
    **kwargs: Any,
 | 
					    **kwargs: Any,
 | 
				
			||||||
) -> _pytest._code.ExceptionInfo[E]:
 | 
					) -> _pytest._code.ExceptionInfo[E]: ...
 | 
				
			||||||
    ...
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def raises(  # noqa: F811
 | 
					def raises(  # noqa: F811
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -22,7 +22,6 @@ from _pytest.deprecated import check_ispytest
 | 
				
			||||||
from _pytest.fixtures import fixture
 | 
					from _pytest.fixtures import fixture
 | 
				
			||||||
from _pytest.outcomes import fail
 | 
					from _pytest.outcomes import fail
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
T = TypeVar("T")
 | 
					T = TypeVar("T")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -42,15 +41,13 @@ def recwarn() -> Generator["WarningsRecorder", None, None]:
 | 
				
			||||||
@overload
 | 
					@overload
 | 
				
			||||||
def deprecated_call(
 | 
					def deprecated_call(
 | 
				
			||||||
    *, match: Optional[Union[str, Pattern[str]]] = ...
 | 
					    *, match: Optional[Union[str, Pattern[str]]] = ...
 | 
				
			||||||
) -> "WarningsRecorder":
 | 
					) -> "WarningsRecorder": ...
 | 
				
			||||||
    ...
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@overload
 | 
					@overload
 | 
				
			||||||
def deprecated_call(  # noqa: F811
 | 
					def deprecated_call(  # noqa: F811
 | 
				
			||||||
    func: Callable[..., T], *args: Any, **kwargs: Any
 | 
					    func: Callable[..., T], *args: Any, **kwargs: Any
 | 
				
			||||||
) -> T:
 | 
					) -> T: ...
 | 
				
			||||||
    ...
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def deprecated_call(  # noqa: F811
 | 
					def deprecated_call(  # noqa: F811
 | 
				
			||||||
| 
						 | 
					@ -92,8 +89,7 @@ def warns(
 | 
				
			||||||
    expected_warning: Union[Type[Warning], Tuple[Type[Warning], ...]] = ...,
 | 
					    expected_warning: Union[Type[Warning], Tuple[Type[Warning], ...]] = ...,
 | 
				
			||||||
    *,
 | 
					    *,
 | 
				
			||||||
    match: Optional[Union[str, Pattern[str]]] = ...,
 | 
					    match: Optional[Union[str, Pattern[str]]] = ...,
 | 
				
			||||||
) -> "WarningsChecker":
 | 
					) -> "WarningsChecker": ...
 | 
				
			||||||
    ...
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@overload
 | 
					@overload
 | 
				
			||||||
| 
						 | 
					@ -102,8 +98,7 @@ def warns(  # noqa: F811
 | 
				
			||||||
    func: Callable[..., T],
 | 
					    func: Callable[..., T],
 | 
				
			||||||
    *args: Any,
 | 
					    *args: Any,
 | 
				
			||||||
    **kwargs: Any,
 | 
					    **kwargs: Any,
 | 
				
			||||||
) -> T:
 | 
					) -> T: ...
 | 
				
			||||||
    ...
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def warns(  # noqa: F811
 | 
					def warns(  # noqa: F811
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -71,8 +71,7 @@ class BaseReport:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if TYPE_CHECKING:
 | 
					    if TYPE_CHECKING:
 | 
				
			||||||
        # Can have arbitrary fields given to __init__().
 | 
					        # Can have arbitrary fields given to __init__().
 | 
				
			||||||
        def __getattr__(self, key: str) -> Any:
 | 
					        def __getattr__(self, key: str) -> Any: ...
 | 
				
			||||||
            ...
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def toterminal(self, out: TerminalWriter) -> None:
 | 
					    def toterminal(self, out: TerminalWriter) -> None:
 | 
				
			||||||
        if hasattr(self, "node"):
 | 
					        if hasattr(self, "node"):
 | 
				
			||||||
| 
						 | 
					@ -609,9 +608,9 @@ def _report_kwargs_from_json(reportdict: Dict[str, Any]) -> Dict[str, Any]:
 | 
				
			||||||
                        description,
 | 
					                        description,
 | 
				
			||||||
                    )
 | 
					                    )
 | 
				
			||||||
                )
 | 
					                )
 | 
				
			||||||
            exception_info: Union[
 | 
					            exception_info: Union[ExceptionChainRepr, ReprExceptionInfo] = (
 | 
				
			||||||
                ExceptionChainRepr, ReprExceptionInfo
 | 
					                ExceptionChainRepr(chain)
 | 
				
			||||||
            ] = ExceptionChainRepr(chain)
 | 
					            )
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            exception_info = ReprExceptionInfo(
 | 
					            exception_info = ReprExceptionInfo(
 | 
				
			||||||
                reprtraceback=reprtraceback,
 | 
					                reprtraceback=reprtraceback,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,12 +7,12 @@ would cause circular references.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Also this makes the module light to import, as it should.
 | 
					Also this makes the module light to import, as it should.
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from enum import Enum
 | 
					from enum import Enum
 | 
				
			||||||
from functools import total_ordering
 | 
					from functools import total_ordering
 | 
				
			||||||
from typing import Literal
 | 
					from typing import Literal
 | 
				
			||||||
from typing import Optional
 | 
					from typing import Optional
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
_ScopeName = Literal["session", "package", "module", "class", "function"]
 | 
					_ScopeName = Literal["session", "package", "module", "class", "function"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,7 +5,6 @@ from typing import Generic
 | 
				
			||||||
from typing import TypeVar
 | 
					from typing import TypeVar
 | 
				
			||||||
from typing import Union
 | 
					from typing import Union
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
__all__ = ["Stash", "StashKey"]
 | 
					__all__ = ["Stash", "StashKey"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,6 +5,7 @@ pytest runtime information (issue #185).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Fixture "mock_timing" also interacts with this module for pytest's own tests.
 | 
					Fixture "mock_timing" also interacts with this module for pytest's own tests.
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from time import perf_counter
 | 
					from time import perf_counter
 | 
				
			||||||
from time import sleep
 | 
					from time import sleep
 | 
				
			||||||
from time import time
 | 
					from time import time
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -33,6 +33,7 @@ from _pytest.runner import CallInfo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if TYPE_CHECKING:
 | 
					if TYPE_CHECKING:
 | 
				
			||||||
    import unittest
 | 
					    import unittest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    import twisted.trial.unittest
 | 
					    import twisted.trial.unittest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    _SysExcInfoType = Union[
 | 
					    _SysExcInfoType = Union[
 | 
				
			||||||
| 
						 | 
					@ -397,8 +398,8 @@ def pytest_runtest_protocol(item: Item) -> Generator[None, object, object]:
 | 
				
			||||||
def check_testcase_implements_trial_reporter(done: List[int] = []) -> None:
 | 
					def check_testcase_implements_trial_reporter(done: List[int] = []) -> None:
 | 
				
			||||||
    if done:
 | 
					    if done:
 | 
				
			||||||
        return
 | 
					        return
 | 
				
			||||||
    from zope.interface import classImplements
 | 
					 | 
				
			||||||
    from twisted.trial.itrial import IReporter
 | 
					    from twisted.trial.itrial import IReporter
 | 
				
			||||||
 | 
					    from zope.interface import classImplements
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    classImplements(TestCaseFunction, IReporter)
 | 
					    classImplements(TestCaseFunction, IReporter)
 | 
				
			||||||
    done.append(1)
 | 
					    done.append(1)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,5 @@
 | 
				
			||||||
"""The pytest entry point."""
 | 
					"""The pytest entry point."""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import pytest
 | 
					import pytest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if __name__ == "__main__":
 | 
					if __name__ == "__main__":
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,10 +7,11 @@ import time
 | 
				
			||||||
import warnings
 | 
					import warnings
 | 
				
			||||||
from unittest import mock
 | 
					from unittest import mock
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import pytest
 | 
					 | 
				
			||||||
from py import error
 | 
					from py import error
 | 
				
			||||||
from py.path import local
 | 
					from py.path import local
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import pytest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@contextlib.contextmanager
 | 
					@contextlib.contextmanager
 | 
				
			||||||
def ignore_encoding_warning():
 | 
					def ignore_encoding_warning():
 | 
				
			||||||
| 
						 | 
					@ -1367,8 +1368,8 @@ class TestPOSIXLocalPath:
 | 
				
			||||||
        assert realpath.basename == "file"
 | 
					        assert realpath.basename == "file"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_owner(self, path1, tmpdir):
 | 
					    def test_owner(self, path1, tmpdir):
 | 
				
			||||||
        from pwd import getpwuid  # type:ignore[attr-defined]
 | 
					 | 
				
			||||||
        from grp import getgrgid  # type:ignore[attr-defined]
 | 
					        from grp import getgrgid  # type:ignore[attr-defined]
 | 
				
			||||||
 | 
					        from pwd import getpwuid  # type:ignore[attr-defined]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        stat = path1.stat()
 | 
					        stat = path1.stat()
 | 
				
			||||||
        assert stat.path == path1
 | 
					        assert stat.path == path1
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -24,7 +24,6 @@ from _pytest.pathlib import import_path
 | 
				
			||||||
from _pytest.pytester import LineMatcher
 | 
					from _pytest.pytester import LineMatcher
 | 
				
			||||||
from _pytest.pytester import Pytester
 | 
					from _pytest.pytester import Pytester
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
if TYPE_CHECKING:
 | 
					if TYPE_CHECKING:
 | 
				
			||||||
    from _pytest._code.code import _TracebackStyle
 | 
					    from _pytest._code.code import _TracebackStyle
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,7 +2,6 @@
 | 
				
			||||||
from typing import List
 | 
					from typing import List
 | 
				
			||||||
from unittest import IsolatedAsyncioTestCase
 | 
					from unittest import IsolatedAsyncioTestCase
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
teardowns: List[None] = []
 | 
					teardowns: List[None] = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,7 +5,6 @@ from typing import List
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import asynctest
 | 
					import asynctest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
teardowns: List[None] = []
 | 
					teardowns: List[None] = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,8 +1,10 @@
 | 
				
			||||||
"""Generate an executable with pytest runner embedded using PyInstaller."""
 | 
					"""Generate an executable with pytest runner embedded using PyInstaller."""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if __name__ == "__main__":
 | 
					if __name__ == "__main__":
 | 
				
			||||||
    import pytest
 | 
					 | 
				
			||||||
    import subprocess
 | 
					    import subprocess
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    import pytest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    hidden = []
 | 
					    hidden = []
 | 
				
			||||||
    for x in pytest.freeze_includes():
 | 
					    for x in pytest.freeze_includes():
 | 
				
			||||||
        hidden.extend(["--hidden-import", x])
 | 
					        hidden.extend(["--hidden-import", x])
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,6 +5,7 @@ pytest main().
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if __name__ == "__main__":
 | 
					if __name__ == "__main__":
 | 
				
			||||||
    import sys
 | 
					    import sys
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    import pytest
 | 
					    import pytest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    sys.exit(pytest.main())
 | 
					    sys.exit(pytest.main())
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,6 +2,7 @@
 | 
				
			||||||
Called by tox.ini: uses the generated executable to run the tests in ./tests/
 | 
					Called by tox.ini: uses the generated executable to run the tests in ./tests/
 | 
				
			||||||
directory.
 | 
					directory.
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if __name__ == "__main__":
 | 
					if __name__ == "__main__":
 | 
				
			||||||
    import os
 | 
					    import os
 | 
				
			||||||
    import sys
 | 
					    import sys
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,7 +13,6 @@ import pytest
 | 
				
			||||||
from _pytest._io import terminalwriter
 | 
					from _pytest._io import terminalwriter
 | 
				
			||||||
from _pytest.monkeypatch import MonkeyPatch
 | 
					from _pytest.monkeypatch import MonkeyPatch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
# These tests were initially copied from py 1.8.1.
 | 
					# These tests were initially copied from py 1.8.1.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -831,9 +831,10 @@ def test_live_logging_suspends_capture(
 | 
				
			||||||
    We parametrize the test to also make sure _LiveLoggingStreamHandler works correctly if no capture manager plugin
 | 
					    We parametrize the test to also make sure _LiveLoggingStreamHandler works correctly if no capture manager plugin
 | 
				
			||||||
    is installed.
 | 
					    is installed.
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    import logging
 | 
					 | 
				
			||||||
    import contextlib
 | 
					    import contextlib
 | 
				
			||||||
 | 
					    import logging
 | 
				
			||||||
    from functools import partial
 | 
					    from functools import partial
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    from _pytest.logging import _LiveLoggingStreamHandler
 | 
					    from _pytest.logging import _LiveLoggingStreamHandler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    class MockCaptureManager:
 | 
					    class MockCaptureManager:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -43,9 +43,10 @@ class TestMockDecoration:
 | 
				
			||||||
        assert values == ("x",)
 | 
					        assert values == ("x",)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_getfuncargnames_patching(self):
 | 
					    def test_getfuncargnames_patching(self):
 | 
				
			||||||
        from _pytest.compat import getfuncargnames
 | 
					 | 
				
			||||||
        from unittest.mock import patch
 | 
					        from unittest.mock import patch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        from _pytest.compat import getfuncargnames
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        class T:
 | 
					        class T:
 | 
				
			||||||
            def original(self, x, y, z):
 | 
					            def original(self, x, y, z):
 | 
				
			||||||
                pass
 | 
					                pass
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1037,8 +1037,8 @@ class TestAssertionRewriteHookDetails:
 | 
				
			||||||
        assert pytester.runpytest().ret == 0
 | 
					        assert pytester.runpytest().ret == 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_write_pyc(self, pytester: Pytester, tmp_path) -> None:
 | 
					    def test_write_pyc(self, pytester: Pytester, tmp_path) -> None:
 | 
				
			||||||
        from _pytest.assertion.rewrite import _write_pyc
 | 
					 | 
				
			||||||
        from _pytest.assertion import AssertionState
 | 
					        from _pytest.assertion import AssertionState
 | 
				
			||||||
 | 
					        from _pytest.assertion.rewrite import _write_pyc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        config = pytester.parseconfig()
 | 
					        config = pytester.parseconfig()
 | 
				
			||||||
        state = AssertionState(config, "rewrite")
 | 
					        state = AssertionState(config, "rewrite")
 | 
				
			||||||
| 
						 | 
					@ -1088,6 +1088,7 @@ class TestAssertionRewriteHookDetails:
 | 
				
			||||||
        an exception that is propagated to the caller.
 | 
					        an exception that is propagated to the caller.
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        import py_compile
 | 
					        import py_compile
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        from _pytest.assertion.rewrite import _read_pyc
 | 
					        from _pytest.assertion.rewrite import _read_pyc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        source = tmp_path / "source.py"
 | 
					        source = tmp_path / "source.py"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2109,9 +2109,9 @@ class TestPytestPluginsVariable:
 | 
				
			||||||
        args = ("--pyargs", "pkg") if use_pyargs else ()
 | 
					        args = ("--pyargs", "pkg") if use_pyargs else ()
 | 
				
			||||||
        res = pytester.runpytest(*args)
 | 
					        res = pytester.runpytest(*args)
 | 
				
			||||||
        assert res.ret == (0 if use_pyargs else 2)
 | 
					        assert res.ret == (0 if use_pyargs else 2)
 | 
				
			||||||
        msg = (
 | 
					        msg = msg = (
 | 
				
			||||||
            msg
 | 
					            "Defining 'pytest_plugins' in a non-top-level conftest is no longer supported"
 | 
				
			||||||
        ) = "Defining 'pytest_plugins' in a non-top-level conftest is no longer supported"
 | 
					        )
 | 
				
			||||||
        if use_pyargs:
 | 
					        if use_pyargs:
 | 
				
			||||||
            assert msg not in res.stdout.str()
 | 
					            assert msg not in res.stdout.str()
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -9,7 +9,6 @@ from _pytest.debugging import _validate_usepdb_cls
 | 
				
			||||||
from _pytest.monkeypatch import MonkeyPatch
 | 
					from _pytest.monkeypatch import MonkeyPatch
 | 
				
			||||||
from _pytest.pytester import Pytester
 | 
					from _pytest.pytester import Pytester
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
_ENVIRON_PYTHONBREAKPOINT = os.environ.get("PYTHONBREAKPOINT", "")
 | 
					_ENVIRON_PYTHONBREAKPOINT = os.environ.get("PYTHONBREAKPOINT", "")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,10 +4,10 @@ Tests and examples for correct "+/-" usage in error diffs.
 | 
				
			||||||
See https://github.com/pytest-dev/pytest/issues/3333 for details.
 | 
					See https://github.com/pytest-dev/pytest/issues/3333 for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import pytest
 | 
					import pytest
 | 
				
			||||||
from _pytest.pytester import Pytester
 | 
					from _pytest.pytester import Pytester
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
TESTCASES = [
 | 
					TESTCASES = [
 | 
				
			||||||
    pytest.param(
 | 
					    pytest.param(
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -114,6 +114,7 @@ def test_cancel_timeout_on_hook(monkeypatch, hook_name) -> None:
 | 
				
			||||||
    to timeout before entering pdb (pytest-dev/pytest-faulthandler#12) or any
 | 
					    to timeout before entering pdb (pytest-dev/pytest-faulthandler#12) or any
 | 
				
			||||||
    other interactive exception (pytest-dev/pytest-faulthandler#14)."""
 | 
					    other interactive exception (pytest-dev/pytest-faulthandler#14)."""
 | 
				
			||||||
    import faulthandler
 | 
					    import faulthandler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    from _pytest import faulthandler as faulthandler_plugin
 | 
					    from _pytest import faulthandler as faulthandler_plugin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    called = []
 | 
					    called = []
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -943,7 +943,8 @@ def test_parameterset_for_parametrize_marks(
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    config = pytester.parseconfig()
 | 
					    config = pytester.parseconfig()
 | 
				
			||||||
    from _pytest.mark import pytest_configure, get_empty_parameterset_mark
 | 
					    from _pytest.mark import get_empty_parameterset_mark
 | 
				
			||||||
 | 
					    from _pytest.mark import pytest_configure
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pytest_configure(config)
 | 
					    pytest_configure(config)
 | 
				
			||||||
    result_mark = get_empty_parameterset_mark(config, ["a"], all)
 | 
					    result_mark = get_empty_parameterset_mark(config, ["a"], all)
 | 
				
			||||||
| 
						 | 
					@ -967,7 +968,8 @@ def test_parameterset_for_fail_at_collect(pytester: Pytester) -> None:
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    config = pytester.parseconfig()
 | 
					    config = pytester.parseconfig()
 | 
				
			||||||
    from _pytest.mark import pytest_configure, get_empty_parameterset_mark
 | 
					    from _pytest.mark import get_empty_parameterset_mark
 | 
				
			||||||
 | 
					    from _pytest.mark import pytest_configure
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pytest_configure(config)
 | 
					    pytest_configure(config)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,6 +3,7 @@
 | 
				
			||||||
This ensures all internal packages can be imported without needing the pytest
 | 
					This ensures all internal packages can be imported without needing the pytest
 | 
				
			||||||
namespace being set, which is critical for the initialization of xdist.
 | 
					namespace being set, which is critical for the initialization of xdist.
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import pkgutil
 | 
					import pkgutil
 | 
				
			||||||
import subprocess
 | 
					import subprocess
 | 
				
			||||||
import sys
 | 
					import sys
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -296,9 +296,9 @@ class TestReportSerialization:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        reprec = pytester.inline_run()
 | 
					        reprec = pytester.inline_run()
 | 
				
			||||||
        if report_class is TestReport:
 | 
					        if report_class is TestReport:
 | 
				
			||||||
            reports: Union[
 | 
					            reports: Union[Sequence[TestReport], Sequence[CollectReport]] = (
 | 
				
			||||||
                Sequence[TestReport], Sequence[CollectReport]
 | 
					                reprec.getreports("pytest_runtest_logreport")
 | 
				
			||||||
            ] = reprec.getreports("pytest_runtest_logreport")
 | 
					            )
 | 
				
			||||||
            # we have 3 reports: setup/call/teardown
 | 
					            # we have 3 reports: setup/call/teardown
 | 
				
			||||||
            assert len(reports) == 3
 | 
					            assert len(reports) == 3
 | 
				
			||||||
            # get the call report
 | 
					            # get the call report
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										2
									
								
								tox.ini
								
								
								
								
							
							
						
						
									
										2
									
								
								tox.ini
								
								
								
								
							| 
						 | 
					@ -200,6 +200,8 @@ extend-ignore =
 | 
				
			||||||
    D302
 | 
					    D302
 | 
				
			||||||
    ; Docstring Content Issues
 | 
					    ; Docstring Content Issues
 | 
				
			||||||
    D400,D401,D401,D402,D405,D406,D407,D408,D409,D410,D411,D412,D413,D414,D415,D416,D417
 | 
					    D400,D401,D401,D402,D405,D406,D407,D408,D409,D410,D411,D412,D413,D414,D415,D416,D417
 | 
				
			||||||
 | 
					    ; Unused imports
 | 
				
			||||||
 | 
					    F401
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[isort]
 | 
					[isort]
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue