SILENT KILLERPanel

Current Path: > > opt > cloudlinux > venv > lib64 > python3.11 > site-packages > coverage


Operation   : Linux premium131.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
Software     : Apache
Server IP    : 162.0.232.56 | Your IP: 216.73.216.111
Domains      : 1034 Domain(s)
Permission   : [ 0755 ]

Files and Folders in: //opt/cloudlinux/venv/lib64/python3.11/site-packages/coverage

NameTypeSizeLast ModifiedActions
__pycache__ Directory - -
fullcoverage Directory - -
htmlfiles Directory - -
__init__.py File 1284 bytes April 17 2025 13:10:59.
__main__.py File 257 bytes April 17 2025 13:10:59.
annotate.py File 3758 bytes April 17 2025 13:10:59.
bytecode.py File 713 bytes April 17 2025 13:10:59.
cmdline.py File 34427 bytes April 17 2025 13:10:59.
collector.py File 20558 bytes April 17 2025 13:10:59.
config.py File 21989 bytes April 17 2025 13:10:59.
context.py File 2483 bytes April 17 2025 13:10:59.
control.py File 51705 bytes April 17 2025 13:10:59.
data.py File 7508 bytes April 17 2025 13:10:59.
debug.py File 17805 bytes April 17 2025 13:10:59.
disposition.py File 1916 bytes April 17 2025 13:10:59.
env.py File 6081 bytes April 17 2025 13:10:59.
exceptions.py File 1362 bytes April 17 2025 13:10:59.
execfile.py File 12133 bytes April 17 2025 13:10:59.
files.py File 19374 bytes April 17 2025 13:10:59.
html.py File 23165 bytes April 17 2025 13:10:59.
inorout.py File 23900 bytes April 17 2025 13:10:59.
jsonreport.py File 4754 bytes April 17 2025 13:10:59.
lcovreport.py File 4939 bytes April 17 2025 13:10:59.
misc.py File 12172 bytes April 17 2025 13:10:59.
multiproc.py File 3846 bytes April 17 2025 13:10:59.
numbits.py File 4669 bytes April 17 2025 13:10:59.
parser.py File 56720 bytes April 17 2025 13:10:59.
phystokens.py File 7805 bytes April 17 2025 13:10:59.
plugin.py File 19525 bytes April 17 2025 13:10:59.
plugin_support.py File 10351 bytes April 17 2025 13:10:59.
py.typed File 72 bytes April 17 2025 13:10:59.
python.py File 8066 bytes April 17 2025 13:10:59.
pytracer.py File 14420 bytes April 17 2025 13:10:59.
report.py File 10623 bytes April 17 2025 13:10:59.
report_core.py File 4068 bytes April 17 2025 13:10:59.
results.py File 13384 bytes April 17 2025 13:10:59.
sqldata.py File 51295 bytes April 17 2025 13:10:59.
templite.py File 10952 bytes April 17 2025 13:10:59.
tomlconfig.py File 7569 bytes April 17 2025 13:10:59.
tracer.cpython-311-x86_64-linux-gnu.so File 29464 bytes April 17 2025 13:11:30.
types.py File 5526 bytes April 17 2025 13:10:59.
version.py File 1431 bytes April 17 2025 13:10:59.
xmlreport.py File 9795 bytes April 17 2025 13:10:59.

Reading File: //opt/cloudlinux/venv/lib64/python3.11/site-packages/coverage/multiproc.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

"""Monkey-patching to add multiprocessing support for coverage.py"""

import multiprocessing
import multiprocessing.process
import os
import os.path
import sys
import traceback

from typing import Any, Dict


# An attribute that will be set on the module to indicate that it has been
# monkey-patched.
PATCHED_MARKER = "_coverage$patched"


OriginalProcess = multiprocessing.process.BaseProcess
original_bootstrap = OriginalProcess._bootstrap     # type: ignore[attr-defined]

class ProcessWithCoverage(OriginalProcess):         # pylint: disable=abstract-method
    """A replacement for multiprocess.Process that starts coverage."""

    def _bootstrap(self, *args, **kwargs):          # type: ignore[no-untyped-def]
        """Wrapper around _bootstrap to start coverage."""
        try:
            from coverage import Coverage       # avoid circular import
            cov = Coverage(data_suffix=True, auto_data=True)
            cov._warn_preimported_source = False
            cov.start()
            debug = cov._debug
            assert debug is not None
            if debug.should("multiproc"):
                debug.write("Calling multiprocessing bootstrap")
        except Exception:
            print("Exception during multiprocessing bootstrap init:")
            traceback.print_exc(file=sys.stdout)
            sys.stdout.flush()
            raise
        try:
            return original_bootstrap(self, *args, **kwargs)
        finally:
            if debug.should("multiproc"):
                debug.write("Finished multiprocessing bootstrap")
            cov.stop()
            cov.save()
            if debug.should("multiproc"):
                debug.write("Saved multiprocessing data")

class Stowaway:
    """An object to pickle, so when it is unpickled, it can apply the monkey-patch."""
    def __init__(self, rcfile: str) -> None:
        self.rcfile = rcfile

    def __getstate__(self) -> Dict[str, str]:
        return {"rcfile": self.rcfile}

    def __setstate__(self, state: Dict[str, str]) -> None:
        patch_multiprocessing(state["rcfile"])


def patch_multiprocessing(rcfile: str) -> None:
    """Monkey-patch the multiprocessing module.

    This enables coverage measurement of processes started by multiprocessing.
    This involves aggressive monkey-patching.

    `rcfile` is the path to the rcfile being used.

    """

    if hasattr(multiprocessing, PATCHED_MARKER):
        return

    OriginalProcess._bootstrap = ProcessWithCoverage._bootstrap     # type: ignore[attr-defined]

    # Set the value in ProcessWithCoverage that will be pickled into the child
    # process.
    os.environ["COVERAGE_RCFILE"] = os.path.abspath(rcfile)

    # When spawning processes rather than forking them, we have no state in the
    # new process.  We sneak in there with a Stowaway: we stuff one of our own
    # objects into the data that gets pickled and sent to the sub-process. When
    # the Stowaway is unpickled, it's __setstate__ method is called, which
    # re-applies the monkey-patch.
    # Windows only spawns, so this is needed to keep Windows working.
    try:
        from multiprocessing import spawn
        original_get_preparation_data = spawn.get_preparation_data
    except (ImportError, AttributeError):
        pass
    else:
        def get_preparation_data_with_stowaway(name: str) -> Dict[str, Any]:
            """Get the original preparation data, and also insert our stowaway."""
            d = original_get_preparation_data(name)
            d["stowaway"] = Stowaway(rcfile)
            return d

        spawn.get_preparation_data = get_preparation_data_with_stowaway

    setattr(multiprocessing, PATCHED_MARKER, True)

SILENT KILLER Tool