PHP 8.2.30
Preview: context.py Size: 2.42 KB
/opt/cloudlinux/venv/lib/python3.11/site-packages/coverage/context.py

# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0
# For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt

"""Determine contexts for coverage.py"""

from __future__ import annotations

from types import FrameType
from typing import cast, Callable, Optional, Sequence


def combine_context_switchers(
    context_switchers: Sequence[Callable[[FrameType], Optional[str]]],
) -> Optional[Callable[[FrameType], Optional[str]]]:
    """Create a single context switcher from multiple switchers.

    `context_switchers` is a list of functions that take a frame as an
    argument and return a string to use as the new context label.

    Returns a function that composites `context_switchers` functions, or None
    if `context_switchers` is an empty list.

    When invoked, the combined switcher calls `context_switchers` one-by-one
    until a string is returned.  The combined switcher returns None if all
    `context_switchers` return None.
    """
    if not context_switchers:
        return None

    if len(context_switchers) == 1:
        return context_switchers[0]

    def should_start_context(frame: FrameType) -> Optional[str]:
        """The combiner for multiple context switchers."""
        for switcher in context_switchers:
            new_context = switcher(frame)
            if new_context is not None:
                return new_context
        return None

    return should_start_context


def should_start_context_test_function(frame: FrameType) -> Optional[str]:
    """Is this frame calling a test_* function?"""
    co_name = frame.f_code.co_name
    if co_name.startswith("test") or co_name == "runTest":
        return qualname_from_frame(frame)
    return None


def qualname_from_frame(frame: FrameType) -> Optional[str]:
    """Get a qualified name for the code running in `frame`."""
    co = frame.f_code
    fname = co.co_name
    method = None
    if co.co_argcount and co.co_varnames[0] == "self":
        self = frame.f_locals.get("self", None)
        method = getattr(self, fname, None)

    if method is None:
        func = frame.f_globals.get(fname)
        if func is None:
            return None
        return cast(str, func.__module__ + "." + fname)

    func = getattr(method, "__func__", None)
    if func is None:
        cls = self.__class__
        return cast(str, cls.__module__ + "." + cls.__name__ + "." + fname)

    return cast(str, func.__module__ + "." + func.__qualname__)

Directory Contents

Dirs: 3 × Files: 40

Name Size Perms Modified Actions
- drwxr-xr-x 2026-02-06 08:01:08
Edit Download
htmlfiles DIR
- drwxr-xr-x 2026-02-06 08:01:08
Edit Download
- drwxr-xr-x 2026-02-06 08:01:08
Edit Download
3.67 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
713 B lrw-r--r-- 2026-01-20 13:01:48
Edit Download
33.62 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
20.08 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
21.47 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
2.42 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
50.49 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
7.33 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
17.39 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
1.87 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
5.94 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
1.33 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
11.85 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
18.92 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
22.62 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
23.34 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
4.64 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
4.82 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
11.89 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
3.76 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
4.56 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
55.39 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
7.62 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
19.07 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
10.11 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
72 B lrw-r--r-- 2026-01-20 13:01:48
Edit Download
7.88 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
14.08 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
10.37 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
3.97 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
13.07 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
50.09 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
10.70 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
7.39 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
28.77 KB lrwxr-xr-x 2026-01-20 13:18:45
Edit Download
5.40 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
1.40 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
9.57 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
1.25 KB lrw-r--r-- 2026-01-20 13:01:48
Edit Download
257 B lrw-r--r-- 2026-01-20 13:01:48
Edit Download

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