PHP 8.2.30
Preview: faulthandler.py Size: 3.04 KB
/opt/cloudlinux/venv/lib/python3.11/site-packages/_pytest/faulthandler.py

import io
import os
import sys
from typing import Generator

import pytest
from _pytest.config import Config
from _pytest.config.argparsing import Parser
from _pytest.nodes import Item
from _pytest.stash import StashKey


fault_handler_stderr_fd_key = StashKey[int]()
fault_handler_originally_enabled_key = StashKey[bool]()


def pytest_addoption(parser: Parser) -> None:
    help = (
        "Dump the traceback of all threads if a test takes "
        "more than TIMEOUT seconds to finish"
    )
    parser.addini("faulthandler_timeout", help, default=0.0)


def pytest_configure(config: Config) -> None:
    import faulthandler

    config.stash[fault_handler_stderr_fd_key] = os.dup(get_stderr_fileno())
    config.stash[fault_handler_originally_enabled_key] = faulthandler.is_enabled()
    faulthandler.enable(file=config.stash[fault_handler_stderr_fd_key])


def pytest_unconfigure(config: Config) -> None:
    import faulthandler

    faulthandler.disable()
    # Close the dup file installed during pytest_configure.
    if fault_handler_stderr_fd_key in config.stash:
        os.close(config.stash[fault_handler_stderr_fd_key])
        del config.stash[fault_handler_stderr_fd_key]
    if config.stash.get(fault_handler_originally_enabled_key, False):
        # Re-enable the faulthandler if it was originally enabled.
        faulthandler.enable(file=get_stderr_fileno())


def get_stderr_fileno() -> int:
    try:
        fileno = sys.stderr.fileno()
        # The Twisted Logger will return an invalid file descriptor since it is not backed
        # by an FD. So, let's also forward this to the same code path as with pytest-xdist.
        if fileno == -1:
            raise AttributeError()
        return fileno
    except (AttributeError, io.UnsupportedOperation):
        # pytest-xdist monkeypatches sys.stderr with an object that is not an actual file.
        # https://docs.python.org/3/library/faulthandler.html#issue-with-file-descriptors
        # This is potentially dangerous, but the best we can do.
        return sys.__stderr__.fileno()


def get_timeout_config_value(config: Config) -> float:
    return float(config.getini("faulthandler_timeout") or 0.0)


@pytest.hookimpl(hookwrapper=True, trylast=True)
def pytest_runtest_protocol(item: Item) -> Generator[None, None, None]:
    timeout = get_timeout_config_value(item.config)
    if timeout > 0:
        import faulthandler

        stderr = item.config.stash[fault_handler_stderr_fd_key]
        faulthandler.dump_traceback_later(timeout, file=stderr)
        try:
            yield
        finally:
            faulthandler.cancel_dump_traceback_later()
    else:
        yield


@pytest.hookimpl(tryfirst=True)
def pytest_enter_pdb() -> None:
    """Cancel any traceback dumping due to timeout before entering pdb."""
    import faulthandler

    faulthandler.cancel_dump_traceback_later()


@pytest.hookimpl(tryfirst=True)
def pytest_exception_interact() -> None:
    """Cancel any traceback dumping due to an interactive exception being
    raised."""
    import faulthandler

    faulthandler.cancel_dump_traceback_later()

Directory Contents

Dirs: 7 × Files: 47

Name Size Perms Modified Actions
assertion DIR
- drwxr-xr-x 2026-02-06 08:01:08
Edit Download
config DIR
- drwxr-xr-x 2026-02-06 08:01:08
Edit Download
mark DIR
- drwxr-xr-x 2026-02-06 08:01:08
Edit Download
_code DIR
- drwxr-xr-x 2026-02-06 08:01:08
Edit Download
_io DIR
- drwxr-xr-x 2026-02-06 08:01:08
Edit Download
_py DIR
- drwxr-xr-x 2026-02-06 08:01:08
Edit Download
- drwxr-xr-x 2026-02-06 08:01:08
Edit Download
20.89 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
33.92 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
12.89 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
13.18 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
5.36 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
25.35 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
3.04 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
65.51 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
1.31 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
8.34 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
31.79 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
25.11 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
16.53 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
33.23 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
31.73 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
14.51 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
25.94 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
1.65 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
10.02 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
3.86 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
25.22 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
0 B lrw-r--r-- 2026-01-20 13:01:48
Edit Download
60.52 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
2.27 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
69.49 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
37.50 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
709 B lrw-r--r-- 2026-01-20 13:01:48
Edit Download
10.67 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
20.35 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
18.01 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
2.81 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
3.18 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
1.19 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
9.96 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
2.98 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
4.60 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
52.25 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
2.85 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
375 B lrw-r--r-- 2026-01-20 13:01:48
Edit Download
11.43 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
14.46 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
3.12 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
4.95 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
4.37 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
3.71 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
160 B lrw-r--r-- 2026-01-20 13:01:48
Edit Download
356 B lrw-r--r-- 2026-01-20 13:01:48
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).