GRAYBYTE WORDPRESS FILE MANAGER3106

Server IP : 198.54.121.189 / Your IP : 216.73.216.224
System : Linux premium69.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
PHP Version : 7.4.33
Disable Function : NONE
cURL : ON | WGET : ON | Sudo : OFF | Pkexec : OFF
Directory : /opt/cloudlinux/venv/lib/python3.11/site-packages/coverage/
Upload Files :
Current_dir [ Not Writeable ] Document_root [ Writeable ]

Command :


Current File : /opt/cloudlinux/venv/lib/python3.11/site-packages/coverage//lcovreport.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

"""LCOV reporting for coverage.py."""

from __future__ import annotations

import base64
import hashlib
import sys

from typing import IO, Iterable, Optional, TYPE_CHECKING

from coverage.plugin import FileReporter
from coverage.report_core import get_analysis_to_report
from coverage.results import Analysis, Numbers
from coverage.types import TMorf

if TYPE_CHECKING:
    from coverage import Coverage


def line_hash(line: str) -> str:
    """Produce a hash of a source line for use in the LCOV file."""
    hashed = hashlib.md5(line.encode("utf-8")).digest()
    return base64.b64encode(hashed).decode("ascii").rstrip("=")


class LcovReporter:
    """A reporter for writing LCOV coverage reports."""

    report_type = "LCOV report"

    def __init__(self, coverage: Coverage) -> None:
        self.coverage = coverage
        self.total = Numbers(self.coverage.config.precision)

    def report(self, morfs: Optional[Iterable[TMorf]], outfile: IO[str]) -> float:
        """Renders the full lcov report.

        `morfs` is a list of modules or filenames

        outfile is the file object to write the file into.
        """

        self.coverage.get_data()
        outfile = outfile or sys.stdout

        for fr, analysis in get_analysis_to_report(self.coverage, morfs):
            self.get_lcov(fr, analysis, outfile)

        return self.total.n_statements and self.total.pc_covered

    def get_lcov(self, fr: FileReporter, analysis: Analysis, outfile: IO[str]) -> None:
        """Produces the lcov data for a single file.

        This currently supports both line and branch coverage,
        however function coverage is not supported.
        """
        self.total += analysis.numbers

        outfile.write("TN:\n")
        outfile.write(f"SF:{fr.relative_filename()}\n")
        source_lines = fr.source().splitlines()

        for covered in sorted(analysis.executed):
            # Note: Coverage.py currently only supports checking *if* a line
            # has been executed, not how many times, so we set this to 1 for
            # nice output even if it's technically incorrect.

            # The lines below calculate a 64-bit encoded md5 hash of the line
            # corresponding to the DA lines in the lcov file, for either case
            # of the line being covered or missed in coverage.py. The final two
            # characters of the encoding ("==") are removed from the hash to
            # allow genhtml to run on the resulting lcov file.
            if source_lines:
                if covered-1 >= len(source_lines):
                    break
                line = source_lines[covered-1]
            else:
                line = ""
            outfile.write(f"DA:{covered},1,{line_hash(line)}\n")

        for missed in sorted(analysis.missing):
            assert source_lines
            line = source_lines[missed-1]
            outfile.write(f"DA:{missed},0,{line_hash(line)}\n")

        outfile.write(f"LF:{analysis.numbers.n_statements}\n")
        outfile.write(f"LH:{analysis.numbers.n_executed}\n")

        # More information dense branch coverage data.
        missing_arcs = analysis.missing_branch_arcs()
        executed_arcs = analysis.executed_branch_arcs()
        for block_number, block_line_number in enumerate(
            sorted(analysis.branch_stats().keys())
        ):
            for branch_number, line_number in enumerate(
                sorted(missing_arcs[block_line_number])
            ):
                # The exit branches have a negative line number,
                # this will not produce valid lcov. Setting
                # the line number of the exit branch to 0 will allow
                # for valid lcov, while preserving the data.
                line_number = max(line_number, 0)
                outfile.write(f"BRDA:{line_number},{block_number},{branch_number},-\n")

            # The start value below allows for the block number to be
            # preserved between these two for loops (stopping the loop from
            # resetting the value of the block number to 0).
            for branch_number, line_number in enumerate(
                sorted(executed_arcs[block_line_number]),
                start=len(missing_arcs[block_line_number]),
            ):
                line_number = max(line_number, 0)
                outfile.write(f"BRDA:{line_number},{block_number},{branch_number},1\n")

        # Summary of the branch coverage.
        if analysis.has_arcs():
            branch_stats = analysis.branch_stats()
            brf = sum(t for t, k in branch_stats.values())
            brh = brf - sum(t - k for t, k in branch_stats.values())
            outfile.write(f"BRF:{brf}\n")
            outfile.write(f"BRH:{brh}\n")

        outfile.write("end_of_record\n")

[ Back ]
Name
Size
Last Modified
Owner / Group
Permissions
Options
..
--
June 25 2025 08:31:36
root / root
0755
__pycache__
--
May 15 2025 08:30:33
root / root
0755
fullcoverage
--
May 15 2025 08:30:33
root / root
0755
htmlfiles
--
May 15 2025 08:30:33
root / root
0755
__init__.py
1.254 KB
April 17 2025 13:10:59
root / root
0644
__main__.py
0.251 KB
April 17 2025 13:10:59
root / root
0644
annotate.py
3.67 KB
April 17 2025 13:10:59
root / root
0644
bytecode.py
0.696 KB
April 17 2025 13:10:59
root / root
0644
cmdline.py
33.62 KB
April 17 2025 13:10:59
root / root
0644
collector.py
20.076 KB
April 17 2025 13:10:59
root / root
0644
config.py
21.474 KB
April 17 2025 13:10:59
root / root
0644
context.py
2.425 KB
April 17 2025 13:10:59
root / root
0644
control.py
50.493 KB
April 17 2025 13:10:59
root / root
0644
data.py
7.332 KB
April 17 2025 13:10:59
root / root
0644
debug.py
17.388 KB
April 17 2025 13:10:59
root / root
0644
disposition.py
1.871 KB
April 17 2025 13:10:59
root / root
0644
env.py
5.938 KB
April 17 2025 13:10:59
root / root
0644
exceptions.py
1.33 KB
April 17 2025 13:10:59
root / root
0644
execfile.py
11.849 KB
April 17 2025 13:10:59
root / root
0644
files.py
18.92 KB
April 17 2025 13:10:59
root / root
0644
html.py
22.622 KB
April 17 2025 13:10:59
root / root
0644
inorout.py
23.34 KB
April 17 2025 13:10:59
root / root
0644
jsonreport.py
4.643 KB
April 17 2025 13:10:59
root / root
0644
lcovreport.py
4.823 KB
April 17 2025 13:10:59
root / root
0644
misc.py
11.887 KB
April 17 2025 13:10:59
root / root
0644
multiproc.py
3.756 KB
April 17 2025 13:10:59
root / root
0644
numbits.py
4.56 KB
April 17 2025 13:10:59
root / root
0644
parser.py
55.391 KB
April 17 2025 13:10:59
root / root
0644
phystokens.py
7.622 KB
April 17 2025 13:10:59
root / root
0644
plugin.py
19.067 KB
April 17 2025 13:10:59
root / root
0644
plugin_support.py
10.108 KB
April 17 2025 13:10:59
root / root
0644
py.typed
0.07 KB
April 17 2025 13:10:59
root / root
0644
python.py
7.877 KB
April 17 2025 13:10:59
root / root
0644
pytracer.py
14.082 KB
April 17 2025 13:10:59
root / root
0644
report.py
10.374 KB
April 17 2025 13:10:59
root / root
0644
report_core.py
3.973 KB
April 17 2025 13:10:59
root / root
0644
results.py
13.07 KB
April 17 2025 13:10:59
root / root
0644
sqldata.py
50.093 KB
April 17 2025 13:10:59
root / root
0644
templite.py
10.695 KB
April 17 2025 13:10:59
root / root
0644
tomlconfig.py
7.392 KB
April 17 2025 13:10:59
root / root
0644
tracer.cpython-311-x86_64-linux-gnu.so
28.773 KB
April 17 2025 13:11:30
root / root
0755
types.py
5.396 KB
April 17 2025 13:10:59
root / root
0644
version.py
1.397 KB
April 17 2025 13:10:59
root / root
0644
xmlreport.py
9.565 KB
April 17 2025 13:10:59
root / root
0644

GRAYBYTE WORDPRESS FILE MANAGER @ 2025
CONTACT ME
Static GIF