coverage 7.6.7__cp311-cp311-win_amd64.whl → 7.11.1__cp311-cp311-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. coverage/__init__.py +2 -0
  2. coverage/__main__.py +2 -0
  3. coverage/annotate.py +1 -2
  4. coverage/bytecode.py +177 -3
  5. coverage/cmdline.py +329 -154
  6. coverage/collector.py +31 -42
  7. coverage/config.py +166 -62
  8. coverage/context.py +4 -5
  9. coverage/control.py +164 -85
  10. coverage/core.py +70 -33
  11. coverage/data.py +3 -4
  12. coverage/debug.py +112 -56
  13. coverage/disposition.py +1 -0
  14. coverage/env.py +65 -55
  15. coverage/exceptions.py +35 -7
  16. coverage/execfile.py +18 -13
  17. coverage/files.py +23 -18
  18. coverage/html.py +134 -88
  19. coverage/htmlfiles/style.css +42 -2
  20. coverage/htmlfiles/style.scss +65 -1
  21. coverage/inorout.py +61 -44
  22. coverage/jsonreport.py +17 -8
  23. coverage/lcovreport.py +16 -20
  24. coverage/misc.py +50 -46
  25. coverage/multiproc.py +12 -7
  26. coverage/numbits.py +3 -4
  27. coverage/parser.py +193 -269
  28. coverage/patch.py +166 -0
  29. coverage/phystokens.py +24 -25
  30. coverage/plugin.py +13 -13
  31. coverage/plugin_support.py +36 -35
  32. coverage/python.py +9 -13
  33. coverage/pytracer.py +40 -33
  34. coverage/regions.py +2 -1
  35. coverage/report.py +59 -43
  36. coverage/report_core.py +6 -9
  37. coverage/results.py +118 -66
  38. coverage/sqldata.py +260 -210
  39. coverage/sqlitedb.py +33 -25
  40. coverage/sysmon.py +195 -157
  41. coverage/templite.py +6 -6
  42. coverage/tomlconfig.py +12 -12
  43. coverage/tracer.cp311-win_amd64.pyd +0 -0
  44. coverage/tracer.pyi +2 -0
  45. coverage/types.py +25 -22
  46. coverage/version.py +3 -18
  47. coverage/xmlreport.py +16 -13
  48. {coverage-7.6.7.dist-info → coverage-7.11.1.dist-info}/METADATA +40 -18
  49. coverage-7.11.1.dist-info/RECORD +59 -0
  50. {coverage-7.6.7.dist-info → coverage-7.11.1.dist-info}/WHEEL +1 -1
  51. coverage-7.6.7.dist-info/RECORD +0 -58
  52. {coverage-7.6.7.dist-info → coverage-7.11.1.dist-info}/entry_points.txt +0 -0
  53. {coverage-7.6.7.dist-info → coverage-7.11.1.dist-info/licenses}/LICENSE.txt +0 -0
  54. {coverage-7.6.7.dist-info → coverage-7.11.1.dist-info}/top_level.txt +0 -0
coverage/tomlconfig.py CHANGED
@@ -7,11 +7,10 @@ from __future__ import annotations
7
7
 
8
8
  import os
9
9
  import re
10
-
11
- from typing import Any, Callable, TypeVar
12
10
  from collections.abc import Iterable
11
+ from typing import Any, Callable, TypeVar
13
12
 
14
- from coverage import env
13
+ from coverage import config, env
15
14
  from coverage.exceptions import ConfigError
16
15
  from coverage.misc import import_third_party, isolate_module, substitute_variables
17
16
  from coverage.types import TConfigSectionOut, TConfigValueOut
@@ -19,7 +18,8 @@ from coverage.types import TConfigSectionOut, TConfigValueOut
19
18
  os = isolate_module(os)
20
19
 
21
20
  if env.PYVERSION >= (3, 11, 0, "alpha", 7):
22
- import tomllib # pylint: disable=import-error
21
+ import tomllib # pylint: disable=import-error
22
+
23
23
  has_tomllib = True
24
24
  else:
25
25
  # TOML support on Python 3.10 and below is an install-time extra option.
@@ -28,11 +28,13 @@ else:
28
28
 
29
29
  class TomlDecodeError(Exception):
30
30
  """An exception class that exists even when toml isn't installed."""
31
+
31
32
  pass
32
33
 
33
34
 
34
35
  TWant = TypeVar("TWant")
35
36
 
37
+
36
38
  class TomlConfigParser:
37
39
  """TOML file reading with the interface of HandyConfigParser."""
38
40
 
@@ -51,7 +53,7 @@ class TomlConfigParser:
51
53
  filename = os.fspath(filenames)
52
54
 
53
55
  try:
54
- with open(filename, encoding='utf-8') as fp:
56
+ with open(filename, encoding="utf-8") as fp:
55
57
  toml_text = fp.read()
56
58
  except OSError:
57
59
  return []
@@ -178,6 +180,10 @@ class TomlConfigParser:
178
180
  bool_strings = {"true": True, "false": False}
179
181
  return self._check_type(name, option, value, bool, bool_strings.__getitem__, "a boolean")
180
182
 
183
+ def getfile(self, section: str, option: str) -> str:
184
+ _, value = self._get_single(section, option)
185
+ return config.process_file_value(value)
186
+
181
187
  def _get_list(self, section: str, option: str) -> tuple[str, list[str]]:
182
188
  """Get a list of strings, substituting environment variables in the elements."""
183
189
  name, values = self._get(section, option)
@@ -191,13 +197,7 @@ class TomlConfigParser:
191
197
 
192
198
  def getregexlist(self, section: str, option: str) -> list[str]:
193
199
  name, values = self._get_list(section, option)
194
- for value in values:
195
- value = value.strip()
196
- try:
197
- re.compile(value)
198
- except re.error as e:
199
- raise ConfigError(f"Invalid [{name}].{option} value {value!r}: {e}") from e
200
- return values
200
+ return config.process_regexlist(name, option, values)
201
201
 
202
202
  def getint(self, section: str, option: str) -> int:
203
203
  name, value = self._get_single(section, option)
Binary file
coverage/tracer.pyi CHANGED
@@ -9,6 +9,7 @@ from coverage.types import TFileDisposition, TTraceData, TTraceFn, Tracer
9
9
 
10
10
  class CFileDisposition(TFileDisposition):
11
11
  """CFileDisposition is in ctracer/filedisp.c"""
12
+
12
13
  canonical_filename: Any
13
14
  file_tracer: Any
14
15
  has_dynamic_filename: Any
@@ -20,6 +21,7 @@ class CFileDisposition(TFileDisposition):
20
21
 
21
22
  class CTracer(Tracer):
22
23
  """CTracer is in ctracer/tracer.c"""
24
+
23
25
  check_include: Any
24
26
  concur_id_func: Any
25
27
  data: TTraceData
coverage/types.py CHANGED
@@ -9,13 +9,9 @@ from __future__ import annotations
9
9
 
10
10
  import os
11
11
  import pathlib
12
-
13
12
  from collections.abc import Iterable, Mapping
14
13
  from types import FrameType, ModuleType
15
- from typing import (
16
- Any, Callable, Optional, Protocol,
17
- Union, TYPE_CHECKING,
18
- )
14
+ from typing import TYPE_CHECKING, Any, Callable, Optional, Protocol
19
15
 
20
16
  if TYPE_CHECKING:
21
17
  from coverage.plugin import FileTracer
@@ -26,35 +22,37 @@ AnyCallable = Callable[..., Any]
26
22
  ## File paths
27
23
 
28
24
  # For arguments that are file paths:
29
- if TYPE_CHECKING:
30
- FilePath = Union[str, os.PathLike[str]]
31
- else:
32
- # PathLike < python3.9 doesn't support subscription
33
- FilePath = Union[str, os.PathLike]
25
+ FilePath = str | os.PathLike[str]
34
26
  # For testing FilePath arguments
35
27
  FilePathClasses = [str, pathlib.Path]
36
- FilePathType = Union[type[str], type[pathlib.Path]]
28
+ FilePathType = type[str] | type[pathlib.Path]
37
29
 
38
30
  ## Python tracing
39
31
 
32
+
40
33
  class TTraceFn(Protocol):
41
34
  """A Python trace function."""
35
+
42
36
  def __call__(
43
37
  self,
44
38
  frame: FrameType,
45
39
  event: str,
46
40
  arg: Any,
47
41
  lineno: TLineNo | None = None, # Our own twist, see collector.py
48
- ) -> TTraceFn | None:
49
- ...
42
+ ) -> TTraceFn | None: ...
43
+
50
44
 
51
45
  ## Coverage.py tracing
52
46
 
53
47
  # Line numbers are pervasive enough that they deserve their own type.
54
48
  TLineNo = int
55
49
 
50
+ # Bytecode offsets are pervasive enough that they deserve their own type.
51
+ TOffset = int
52
+
56
53
  TArc = tuple[TLineNo, TLineNo]
57
54
 
55
+
58
56
  class TFileDisposition(Protocol):
59
57
  """A simple value type for recording what to do with a file."""
60
58
 
@@ -75,14 +73,15 @@ class TFileDisposition(Protocol):
75
73
  # - If measuring arcs in the C tracer, the values are sets of packed arcs (two
76
74
  # line numbers combined into one integer).
77
75
 
78
- TTraceFileData = Union[set[TLineNo], set[TArc], set[int]]
76
+ TTraceFileData = set[TLineNo] | set[TArc] | set[int]
79
77
 
80
78
  TTraceData = dict[str, TTraceFileData]
81
79
 
82
80
  # Functions passed into collectors.
83
81
  TShouldTraceFn = Callable[[str, FrameType], TFileDisposition]
84
82
  TCheckIncludeFn = Callable[[str, FrameType], bool]
85
- TShouldStartContextFn = Callable[[FrameType], Union[str, None]]
83
+ TShouldStartContextFn = Callable[[FrameType], str | None]
84
+
86
85
 
87
86
  class Tracer(Protocol):
88
87
  """Anything that can report on Python execution."""
@@ -97,8 +96,7 @@ class Tracer(Protocol):
97
96
  unlock_data: Callable[[], None]
98
97
  warn: TWarnFn
99
98
 
100
- def __init__(self) -> None:
101
- ...
99
+ def __init__(self) -> None: ...
102
100
 
103
101
  def start(self) -> TTraceFn | None:
104
102
  """Start this tracer, return a trace function if based on sys.settrace."""
@@ -125,12 +123,13 @@ TCovKwargs = Any
125
123
  ## Configuration
126
124
 
127
125
  # One value read from a config file.
128
- TConfigValueIn = Optional[Union[bool, int, float, str, Iterable[str]]]
129
- TConfigValueOut = Optional[Union[bool, int, float, str, list[str]]]
126
+ TConfigValueIn = Optional[bool | int | float | str | Iterable[str] | Mapping[str, Iterable[str]]]
127
+ TConfigValueOut = Optional[bool | int | float | str | list[str] | dict[str, list[str]]]
130
128
  # An entire config section, mapping option names to values.
131
129
  TConfigSectionIn = Mapping[str, TConfigValueIn]
132
130
  TConfigSectionOut = Mapping[str, TConfigValueOut]
133
131
 
132
+
134
133
  class TConfigurable(Protocol):
135
134
  """Something that can proxy to the coverage configuration settings."""
136
135
 
@@ -156,6 +155,7 @@ class TConfigurable(Protocol):
156
155
 
157
156
  """
158
157
 
158
+
159
159
  class TPluginConfig(Protocol):
160
160
  """Something that can provide options to a plugin."""
161
161
 
@@ -165,25 +165,28 @@ class TPluginConfig(Protocol):
165
165
 
166
166
  ## Parsing
167
167
 
168
- TMorf = Union[ModuleType, str]
168
+ TMorf = ModuleType | str
169
169
 
170
170
  TSourceTokenLines = Iterable[list[tuple[str, str]]]
171
171
 
172
172
 
173
173
  ## Plugins
174
174
 
175
+
175
176
  class TPlugin(Protocol):
176
177
  """What all plugins have in common."""
178
+
177
179
  _coverage_plugin_name: str
178
180
  _coverage_enabled: bool
179
181
 
180
182
 
181
183
  ## Debugging
182
184
 
185
+
183
186
  class TWarnFn(Protocol):
184
187
  """A callable warn() function."""
185
- def __call__(self, msg: str, slug: str | None = None, once: bool = False) -> None:
186
- ...
188
+
189
+ def __call__(self, msg: str, slug: str | None = None, once: bool = False) -> None: ...
187
190
 
188
191
 
189
192
  class TDebugCtl(Protocol):
coverage/version.py CHANGED
@@ -8,7 +8,7 @@ from __future__ import annotations
8
8
 
9
9
  # version_info: same semantics as sys.version_info.
10
10
  # _dev: the .devN suffix if any.
11
- version_info = (7, 6, 7, "final", 0)
11
+ version_info = (7, 11, 1, "final", 0)
12
12
  _dev = 0
13
13
 
14
14
 
@@ -22,7 +22,7 @@ def _make_version(
22
22
  ) -> str:
23
23
  """Create a readable version string from version_info tuple components."""
24
24
  assert releaselevel in ["alpha", "beta", "candidate", "final"]
25
- version = "%d.%d.%d" % (major, minor, micro)
25
+ version = f"{major}.{minor}.{micro}"
26
26
  if releaselevel != "final":
27
27
  short = {"alpha": "a", "beta": "b", "candidate": "rc"}[releaselevel]
28
28
  version += f"{short}{serial}"
@@ -31,20 +31,5 @@ def _make_version(
31
31
  return version
32
32
 
33
33
 
34
- def _make_url(
35
- major: int,
36
- minor: int,
37
- micro: int,
38
- releaselevel: str,
39
- serial: int = 0,
40
- dev: int = 0,
41
- ) -> str:
42
- """Make the URL people should start at for this version of coverage.py."""
43
- return (
44
- "https://coverage.readthedocs.io/en/"
45
- + _make_version(major, minor, micro, releaselevel, serial, dev)
46
- )
47
-
48
-
49
34
  __version__ = _make_version(*version_info, _dev)
50
- __url__ = _make_url(*version_info, _dev)
35
+ __url__ = f"https://coverage.readthedocs.io/en/{__version__}"
coverage/xmlreport.py CHANGED
@@ -10,13 +10,12 @@ import os.path
10
10
  import sys
11
11
  import time
12
12
  import xml.dom.minidom
13
-
14
- from dataclasses import dataclass
15
- from typing import Any, IO, TYPE_CHECKING
16
13
  from collections.abc import Iterable
14
+ from dataclasses import dataclass
15
+ from typing import IO, TYPE_CHECKING, Any
17
16
 
18
17
  from coverage import __version__, files
19
- from coverage.misc import isolate_module, human_sorted, human_sorted_items
18
+ from coverage.misc import human_sorted, human_sorted_items, isolate_module
20
19
  from coverage.plugin import FileReporter
21
20
  from coverage.report_core import get_analysis_to_report
22
21
  from coverage.results import Analysis
@@ -37,12 +36,13 @@ def rate(hit: int, num: int) -> str:
37
36
  if num == 0:
38
37
  return "1"
39
38
  else:
40
- return "%.4g" % (hit / num)
39
+ return f"{hit / num:.4g}"
41
40
 
42
41
 
43
42
  @dataclass
44
43
  class PackageData:
45
44
  """Data we keep about each "package" (in Java terms)."""
45
+
46
46
  elements: dict[str, xml.dom.minidom.Element]
47
47
  hits: int
48
48
  lines: int
@@ -95,11 +95,14 @@ class XmlReporter:
95
95
 
96
96
  # Write header stuff.
97
97
  xcoverage = self.xml_out.documentElement
98
+ assert xcoverage is not None
98
99
  xcoverage.setAttribute("version", __version__)
99
- xcoverage.setAttribute("timestamp", str(int(time.time()*1000)))
100
- xcoverage.appendChild(self.xml_out.createComment(
101
- f" Generated by coverage.py: {__url__} ",
102
- ))
100
+ xcoverage.setAttribute("timestamp", str(int(time.time() * 1000)))
101
+ xcoverage.appendChild(
102
+ self.xml_out.createComment(
103
+ f" Generated by coverage.py: {__url__} ",
104
+ )
105
+ )
103
106
  xcoverage.appendChild(self.xml_out.createComment(f" Based on {DTD_URL} "))
104
107
 
105
108
  # Call xml_file for each file in the data.
@@ -182,14 +185,14 @@ class XmlReporter:
182
185
  if not self.config.relative_files:
183
186
  source_path = files.canonical_filename(source_path)
184
187
  if filename.startswith(source_path.replace("\\", "/") + "/"):
185
- rel_name = filename[len(source_path)+1:]
188
+ rel_name = filename[len(source_path) + 1 :]
186
189
  break
187
190
  else:
188
191
  rel_name = fr.relative_filename().replace("\\", "/")
189
- self.source_paths.add(fr.filename[:-len(rel_name)].rstrip(r"\/"))
192
+ self.source_paths.add(fr.filename[: -len(rel_name)].rstrip(r"\/"))
190
193
 
191
194
  dirname = os.path.dirname(rel_name) or "."
192
- dirname = "/".join(dirname.split("/")[:self.config.xml_package_depth])
195
+ dirname = "/".join(dirname.split("/")[: self.config.xml_package_depth])
193
196
  package_name = dirname.replace("/", ".")
194
197
 
195
198
  package = self.packages.setdefault(package_name, PackageData({}, 0, 0, 0, 0))
@@ -223,7 +226,7 @@ class XmlReporter:
223
226
  xline.setAttribute("branch", "true")
224
227
  xline.setAttribute(
225
228
  "condition-coverage",
226
- "%d%% (%d/%d)" % (100*taken//total, taken, total),
229
+ f"{100 * taken // total}% ({taken}/{total})",
227
230
  )
228
231
  if line in missing_branch_arcs:
229
232
  annlines = ["exit" if b < 0 else str(b) for b in missing_branch_arcs[line]]
@@ -1,12 +1,12 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: coverage
3
- Version: 7.6.7
3
+ Version: 7.11.1
4
4
  Summary: Code coverage measurement for Python
5
5
  Home-page: https://github.com/nedbat/coveragepy
6
- Author: Ned Batchelder and 240 others
6
+ Author: Ned Batchelder and 250 others
7
7
  Author-email: ned@nedbatchelder.com
8
8
  License: Apache-2.0
9
- Project-URL: Documentation, https://coverage.readthedocs.io/en/7.6.7
9
+ Project-URL: Documentation, https://coverage.readthedocs.io/en/7.11.1
10
10
  Project-URL: Funding, https://tidelift.com/subscription/pkg/pypi-coverage?utm_source=pypi-coverage&utm_medium=referral&utm_campaign=pypi
11
11
  Project-URL: Issues, https://github.com/nedbat/coveragepy/issues
12
12
  Project-URL: Mastodon, https://hachyderm.io/@coveragepy
@@ -14,26 +14,39 @@ Project-URL: Mastodon (nedbat), https://hachyderm.io/@nedbat
14
14
  Keywords: code coverage testing
15
15
  Classifier: Environment :: Console
16
16
  Classifier: Intended Audience :: Developers
17
- Classifier: License :: OSI Approved :: Apache Software License
18
17
  Classifier: Operating System :: OS Independent
19
18
  Classifier: Programming Language :: Python
20
19
  Classifier: Programming Language :: Python :: 3
21
- Classifier: Programming Language :: Python :: 3.9
22
20
  Classifier: Programming Language :: Python :: 3.10
23
21
  Classifier: Programming Language :: Python :: 3.11
24
22
  Classifier: Programming Language :: Python :: 3.12
25
23
  Classifier: Programming Language :: Python :: 3.13
26
24
  Classifier: Programming Language :: Python :: 3.14
25
+ Classifier: Programming Language :: Python :: 3.15
26
+ Classifier: Programming Language :: Python :: Free Threading :: 3 - Stable
27
27
  Classifier: Programming Language :: Python :: Implementation :: CPython
28
28
  Classifier: Programming Language :: Python :: Implementation :: PyPy
29
29
  Classifier: Topic :: Software Development :: Quality Assurance
30
30
  Classifier: Topic :: Software Development :: Testing
31
31
  Classifier: Development Status :: 5 - Production/Stable
32
- Requires-Python: >=3.9
32
+ Requires-Python: >=3.10
33
33
  Description-Content-Type: text/x-rst
34
34
  License-File: LICENSE.txt
35
35
  Provides-Extra: toml
36
- Requires-Dist: tomli ; (python_full_version <= "3.11.0a6") and extra == 'toml'
36
+ Requires-Dist: tomli; python_full_version <= "3.11.0a6" and extra == "toml"
37
+ Dynamic: author
38
+ Dynamic: author-email
39
+ Dynamic: classifier
40
+ Dynamic: description
41
+ Dynamic: description-content-type
42
+ Dynamic: home-page
43
+ Dynamic: keywords
44
+ Dynamic: license
45
+ Dynamic: license-file
46
+ Dynamic: project-url
47
+ Dynamic: provides-extra
48
+ Dynamic: requires-python
49
+ Dynamic: summary
37
50
 
38
51
  .. Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0
39
52
  .. For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt
@@ -53,6 +66,7 @@ Code coverage measurement for Python.
53
66
  | |kit| |license| |versions|
54
67
  | |test-status| |quality-status| |docs| |metacov|
55
68
  | |tidelift| |sponsor| |stars| |mastodon-coveragepy| |mastodon-nedbat|
69
+ |bluesky-nedbat|
56
70
 
57
71
  Coverage.py measures code coverage, typically during test execution. It uses
58
72
  the code analysis tools and tracing hooks provided in the Python standard
@@ -62,20 +76,25 @@ Coverage.py runs on these versions of Python:
62
76
 
63
77
  .. PYVERSIONS
64
78
 
65
- * Python 3.9 through 3.14 alpha 1, including free-threading.
66
- * PyPy3 versions 3.9 and 3.10.
79
+ * Python 3.10 through 3.15 alpha, including free-threading.
80
+ * PyPy3 versions 3.10 and 3.11.
67
81
 
68
82
  Documentation is on `Read the Docs`_. Code repository and issue tracker are on
69
83
  `GitHub`_.
70
84
 
71
- .. _Read the Docs: https://coverage.readthedocs.io/en/7.6.7/
85
+ .. _Read the Docs: https://coverage.readthedocs.io/en/7.11.1/
72
86
  .. _GitHub: https://github.com/nedbat/coveragepy
73
87
 
74
88
  **New in 7.x:**
89
+ ``[run] patch`` setting;
90
+ ``--save-signal`` option;
91
+ ``[run] core`` setting;
92
+ ``[run] source_dirs`` setting;
93
+ ``Coverage.branch_stats()``;
75
94
  multi-line exclusion patterns;
76
95
  function/class reporting;
77
96
  experimental support for sys.monitoring;
78
- dropped support for Python 3.7 and 3.8;
97
+ dropped support for Python up to 3.9;
79
98
  added ``Coverage.collect()`` context manager;
80
99
  improved data combining;
81
100
  ``[run] exclude_also`` setting;
@@ -113,7 +132,7 @@ Getting Started
113
132
  Looking to run ``coverage`` on your test suite? See the `Quick Start section`_
114
133
  of the docs.
115
134
 
116
- .. _Quick Start section: https://coverage.readthedocs.io/en/7.6.7/#quick-start
135
+ .. _Quick Start section: https://coverage.readthedocs.io/en/7.11.1/#quick-start
117
136
 
118
137
 
119
138
  Change history
@@ -121,7 +140,7 @@ Change history
121
140
 
122
141
  The complete history of changes is on the `change history page`_.
123
142
 
124
- .. _change history page: https://coverage.readthedocs.io/en/7.6.7/changes.html
143
+ .. _change history page: https://coverage.readthedocs.io/en/7.11.1/changes.html
125
144
 
126
145
 
127
146
  Code of Conduct
@@ -140,7 +159,7 @@ Contributing
140
159
  Found a bug? Want to help improve the code or documentation? See the
141
160
  `Contributing section`_ of the docs.
142
161
 
143
- .. _Contributing section: https://coverage.readthedocs.io/en/7.6.7/contributing.html
162
+ .. _Contributing section: https://coverage.readthedocs.io/en/7.11.1/contributing.html
144
163
 
145
164
 
146
165
  Security
@@ -168,7 +187,7 @@ Licensed under the `Apache 2.0 License`_. For details, see `NOTICE.txt`_.
168
187
  :target: https://github.com/nedbat/coveragepy/actions/workflows/quality.yml
169
188
  :alt: Quality check status
170
189
  .. |docs| image:: https://readthedocs.org/projects/coverage/badge/?version=latest&style=flat
171
- :target: https://coverage.readthedocs.io/en/7.6.7/
190
+ :target: https://coverage.readthedocs.io/en/7.11.1/
172
191
  :alt: Documentation
173
192
  .. |kit| image:: https://img.shields.io/pypi/v/coverage
174
193
  :target: https://pypi.org/project/coverage/
@@ -177,7 +196,7 @@ Licensed under the `Apache 2.0 License`_. For details, see `NOTICE.txt`_.
177
196
  :target: https://pypi.org/project/coverage/
178
197
  :alt: Python versions supported
179
198
  .. |license| image:: https://img.shields.io/pypi/l/coverage.svg
180
- :target: https://pypi.org/project/coverage/
199
+ :target: https://github.com/nedbat/coveragepy/blob/master/LICENSE.txt
181
200
  :alt: License
182
201
  .. |metacov| image:: https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/nedbat/8c6980f77988a327348f9b02bbaf67f5/raw/metacov.json
183
202
  :target: https://nedbat.github.io/coverage-reports/latest.html
@@ -185,7 +204,7 @@ Licensed under the `Apache 2.0 License`_. For details, see `NOTICE.txt`_.
185
204
  .. |tidelift| image:: https://tidelift.com/badges/package/pypi/coverage
186
205
  :target: https://tidelift.com/subscription/pkg/pypi-coverage?utm_source=pypi-coverage&utm_medium=referral&utm_campaign=readme
187
206
  :alt: Tidelift
188
- .. |stars| image:: https://img.shields.io/github/stars/nedbat/coveragepy.svg?logo=github
207
+ .. |stars| image:: https://img.shields.io/github/stars/nedbat/coveragepy.svg?logo=github&style=flat
189
208
  :target: https://github.com/nedbat/coveragepy/stargazers
190
209
  :alt: GitHub stars
191
210
  .. |mastodon-nedbat| image:: https://img.shields.io/badge/dynamic/json?style=flat&labelColor=450657&logo=mastodon&logoColor=ffffff&label=@nedbat&query=followers_count&url=https%3A%2F%2Fhachyderm.io%2Fapi%2Fv1%2Faccounts%2Flookup%3Facct=nedbat
@@ -194,6 +213,9 @@ Licensed under the `Apache 2.0 License`_. For details, see `NOTICE.txt`_.
194
213
  .. |mastodon-coveragepy| image:: https://img.shields.io/badge/dynamic/json?style=flat&labelColor=450657&logo=mastodon&logoColor=ffffff&label=@coveragepy&query=followers_count&url=https%3A%2F%2Fhachyderm.io%2Fapi%2Fv1%2Faccounts%2Flookup%3Facct=coveragepy
195
214
  :target: https://hachyderm.io/@coveragepy
196
215
  :alt: coveragepy on Mastodon
216
+ .. |bluesky-nedbat| image:: https://img.shields.io/badge/dynamic/json?style=flat&color=96a3b0&labelColor=3686f7&logo=icloud&logoColor=white&label=@nedbat&url=https%3A%2F%2Fpublic.api.bsky.app%2Fxrpc%2Fapp.bsky.actor.getProfile%3Factor=nedbat.com&query=followersCount
217
+ :target: https://bsky.app/profile/nedbat.com
218
+ :alt: nedbat on Bluesky
197
219
  .. |sponsor| image:: https://img.shields.io/badge/%E2%9D%A4-Sponsor%20me-brightgreen?style=flat&logo=GitHub
198
220
  :target: https://github.com/sponsors/nedbat
199
221
  :alt: Sponsor me on GitHub
@@ -0,0 +1,59 @@
1
+ coverage/__init__.py,sha256=p80cmYrM35VlYk07TtKV90tz0FyOH7HFS_mMqqlkQO8,1103
2
+ coverage/__main__.py,sha256=M2jcqCZIu_rkmoO4CKgwElX084u6SHdZfVUg3lGiWhg,307
3
+ coverage/annotate.py,sha256=rcUxalBphRmZePMoSZO8yPCMR7NkdEKsglUmAQV7COM,3863
4
+ coverage/bytecode.py,sha256=ORPqObKPY1P8Voi6P2zF3bYWkGzc118i4AM2kElyBNQ,6860
5
+ coverage/cmdline.py,sha256=yyQzcnDaNYD_gQ8JuOb9DD1Lvli8vf60-7evDczt79Q,38001
6
+ coverage/collector.py,sha256=VuSlZbSwCUzMSEqHN1MAz4uD3xMTtONAdNU66lIwX0U,19025
7
+ coverage/config.py,sha256=mOCzSZsSF0kVICbXeR4IyITmywLDltDZyA6EG3y3aHA,26693
8
+ coverage/context.py,sha256=YX7Pg0y3Og-d3qDcgoMmEpuf9jIcigcYnF0edZaqIsM,2506
9
+ coverage/control.py,sha256=bKArV3FBjbDNkCScMPyKTMwmRJqqKcnnsVe5YKE6Wlc,56293
10
+ coverage/core.py,sha256=DnOFT6WynVnC4MdzuY9SzIfAA9yqbWEWCqEhw7vrIok,5495
11
+ coverage/data.py,sha256=WuNUTfXoytulNWHA-F1OnSfvqu0DgSN7tg9R4ow2CjA,8352
12
+ coverage/debug.py,sha256=Ozf2IxyAu85yoxcQEIsthkd0KMNyU2Ms8uIS0mKAm4o,22420
13
+ coverage/disposition.py,sha256=eZmBzTPMmLkDi5OLRNrqtJQMZ4XXh4sHrP1xPEZ50D8,1954
14
+ coverage/env.py,sha256=-QCJcrE6UoJmUzO_3shtviXViblPiYEBEmb6vgrpq0c,5105
15
+ coverage/exceptions.py,sha256=vi0WrNFp8gwkN-FfIQYbyqz5iNbLpl2YQ_ijZkkV29k,2061
16
+ coverage/execfile.py,sha256=TSqB02-3aCYLqPe_ELpD91Y29UVi7EwOLrkTZsZ4pFg,12320
17
+ coverage/files.py,sha256=xXp40_DeEM8oUd-EEtUcvK24YHTxmiHCfhfcgeOTQxc,19908
18
+ coverage/html.py,sha256=9oO7s6BHzoHNaYCldJ_k9oFD4TIMDd0x4wH_jXJaSUw,32238
19
+ coverage/inorout.py,sha256=HbNb7xIolXGyXtohzwgDQCLrO4HkFnGo5oCvws2lqmY,24957
20
+ coverage/jsonreport.py,sha256=wZgntJY2uApDvAdpnNPcrwNvmyb3Tc4XK3fN5L2Opf0,7255
21
+ coverage/lcovreport.py,sha256=OmqTh9rQ2GaIRYADx_3OOhmfZOoG_ocPqbOB9j7Kp_A,8091
22
+ coverage/misc.py,sha256=pvDaKapNAHzE76UaHRqsJuhhmMhgXBJLAYKwEIOwPkI,11662
23
+ coverage/multiproc.py,sha256=PpThtQg0j9NHlYpceNxx5wg9O4XdOjjt03jlI2rkfwI,4293
24
+ coverage/numbits.py,sha256=t7XK_d-I-tVZgRS2M3Y5PG0Pq017D3rvecSipBsT_CA,4817
25
+ coverage/parser.py,sha256=RFozdV1TWUI9v8YdxmZtI1bFD_NGTLjW5hfGlFLNkxM,47487
26
+ coverage/patch.py,sha256=3GHFJnl1scWtvRVhFp2-qPHdAcF8Ve44vdl8xl3C7Oo,5731
27
+ coverage/phystokens.py,sha256=QYlZQBB343TW7SRHhaeo6AoKr9abhMCFjSC4c6aLg3Y,7645
28
+ coverage/plugin.py,sha256=sWFPqm3JrMLRrRNZryP3WmRi3VbGBmCWol9cKEKFYas,22124
29
+ coverage/plugin_support.py,sha256=DWcHXg2Gde0r5XH68sxygXpLGcMlp8H6zDhNOKg6Wc4,10741
30
+ coverage/py.typed,sha256=QhKiyYY18iX2PTjtgwSYebGpYvH_m0bYEyU_kMST7EU,73
31
+ coverage/python.py,sha256=RU9DtVl7Y1driv2JPfdl4mXhUhWH0wKtlfTZe9hASew,8856
32
+ coverage/pytracer.py,sha256=Liqdi9lQlnisMmoPklkj2xMQFsr3_8w3LZ9LkedZ3qY,15685
33
+ coverage/regions.py,sha256=cRCIZynMRr9J76g81eBPegSSd1eIJ0VofIKA3w90TxY,4625
34
+ coverage/report.py,sha256=QRtgWnB2wJNcVBVuxoHrR_eGHwAhQkTE-ShqBDoD5WE,11114
35
+ coverage/report_core.py,sha256=DdJsZxBcuiHuDlLFIPyq3wlbhJJ6AipDPpmxucFmiKM,4159
36
+ coverage/results.py,sha256=81OEuQwiAJrAs4HNVtdH1VII-HnoaWMQRPczg9P6SDw,16572
37
+ coverage/sqldata.py,sha256=YDlVuCWRz-EqDAu9w-Q3P-8ETib17MRwdGkuyMjQp6U,46679
38
+ coverage/sqlitedb.py,sha256=7MmRxX7alrq-Elzx5TzJJNi6xURwUH5mX2Pvgr_Qnp8,10249
39
+ coverage/sysmon.py,sha256=otL6DhP-eILiAv_dwJbPMNQvVG3VOtkcTOoCXZG4lpA,18491
40
+ coverage/templite.py,sha256=ETQ1TTufhLF6qlS2kuaX9gg7iQ-c0V6hTlGcInJ0dWA,11116
41
+ coverage/tomlconfig.py,sha256=GtiVV3RzKwj5Z6-RSL8XZFSO5iLfj97dcvqpODkw5Ek,7766
42
+ coverage/tracer.cp311-win_amd64.pyd,sha256=g__QCHJ0NbZ6MjCCij_PPBsB2Fl0ReJx6nzg3seS3T8,22016
43
+ coverage/tracer.pyi,sha256=e1YXvQg8IuQaaoP7Tj25It3pNAtv0Mt29DwwxO4KfaM,1248
44
+ coverage/types.py,sha256=0f03sJRwr4TZItHwZPHNFxL5bhjU1B3ye8C1BVQaUPc,5804
45
+ coverage/version.py,sha256=XM2i0-0Seds3IWZgvv5KK49EOQPvnQJu1AZ_coQtACU,1127
46
+ coverage/xmlreport.py,sha256=Wha1LxJgIEqKPO2hVqywTDt3QfPNtk4bgHqxBnog-mA,10133
47
+ coverage/htmlfiles/coverage_html.js,sha256=PqDTAlVdIaB9gIjEf6JHHysMm_D7HyRe4BzQFfpf3OM,26207
48
+ coverage/htmlfiles/favicon_32.png,sha256=vIEA-odDwRvSQ-syWfSwEnWGUWEv2b-Tv4tzTRfwJWE,1732
49
+ coverage/htmlfiles/index.html,sha256=eciDXoye0zDRlWUY5q4HHlE1FPVG4_y0NZ9_OIwaQ0E,7005
50
+ coverage/htmlfiles/keybd_closed.png,sha256=fZv4rmY3DkNJtPQjrFJ5UBOE5DdNof3mdeCZWC7TOoo,9004
51
+ coverage/htmlfiles/pyfile.html,sha256=dJV8bc3mMQz6J_N2KxVMXNKVge6vnMiQiqqe1QYuZmw,6643
52
+ coverage/htmlfiles/style.css,sha256=DoE2sbDGB3s5ZrE9QCbgKivfw-HcpTRvtMeXbJn7EjA,16020
53
+ coverage/htmlfiles/style.scss,sha256=ZjH-qCU3X7wrMfepdUhqyYc8gXaqBz6n_M9hTMU93Kw,21737
54
+ coverage-7.11.1.dist-info/licenses/LICENSE.txt,sha256=6z17VIVGasvYHytJb1latjfSeS4mggayfZnnk722dUk,10351
55
+ coverage-7.11.1.dist-info/METADATA,sha256=YhW_DNbwROyGPvRbjjP67OQksabt5hQxYEsKCoQg2kY,9254
56
+ coverage-7.11.1.dist-info/WHEEL,sha256=JLOMsP7F5qtkAkINx5UnzbFguf8CqZeraV8o04b0I8I,101
57
+ coverage-7.11.1.dist-info/entry_points.txt,sha256=1YZ9VNHzvplT76fAhqRNQLG8wmPI5AtUKig-3sjqQJo,123
58
+ coverage-7.11.1.dist-info/top_level.txt,sha256=BjhyiIvusb5OJkqCXjRncTF3soKF-mDOby-hxkWwwv0,9
59
+ coverage-7.11.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.5.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp311-cp311-win_amd64
5
5
 
@@ -1,58 +0,0 @@
1
- coverage/__init__.py,sha256=f3KZIgjkIaxJ4WZJAtfWwAHO6G1czoeyvuCOb09vRIs,1081
2
- coverage/__main__.py,sha256=LzQl-dAzS04IRHO8f2hyW79ck5g68kO13-9Ez-nHKGQ,303
3
- coverage/annotate.py,sha256=hCU5cXuhg_XgP_A9OL16njPO5sfjnxWo_p-FeKQMJrw,3865
4
- coverage/bytecode.py,sha256=DInUGd7brsv5mdmGdQmAR79yHAN3H14ccitcPIzV7Qc,744
5
- coverage/cmdline.py,sha256=8OoJ_sEjXF4zdz8VgIlXA-o6atsdXQI8Cbdum_7An_A,35254
6
- coverage/collector.py,sha256=UfezPlmAPjOpNhgE6PbdYUr4gK9Zi2mPoEJ38XMPZEA,19972
7
- coverage/config.py,sha256=wazyeHPbB14ahCNXHIzhtxaVfJc-gw4RDhH2B5rQSLQ,22926
8
- coverage/context.py,sha256=lb8B-58yW8du56inutIeiZuTxdNr7TfJi1JddvRwQhg,2573
9
- coverage/control.py,sha256=K8-_8eBY0QfKqd_Hq3T-5IPeCHu0XlTdLWX1_ub10XM,53355
10
- coverage/core.py,sha256=fHGa_gWGFYju14nMt6OWcWPsFpZVDPJEVCA5JkOHJI8,3623
11
- coverage/data.py,sha256=TNWtGx3noa_FBYFB0QUt3a8YDTkJyij3ux9Rt_nWgGA,8297
12
- coverage/debug.py,sha256=5n1QX0ytnfQFk76j3q6o4lV_E7Ys7iwi_7OiVNGDHzU,21310
13
- coverage/disposition.py,sha256=xb-zvwp_42zbePVis4Y_m_xjOyHcM6zmTGM1dn7TMv0,1952
14
- coverage/env.py,sha256=TBSc8WOwPTsmJT1KZninzaM92uiL6uQdAJpyqyHa9eU,4593
15
- coverage/exceptions.py,sha256=QeimYAr2NgdcvWceOX8ull-66maTv2zz7UZ7ZFQUh9A,1460
16
- coverage/execfile.py,sha256=zkZJId_n4PEGuuWqQK8PXoBvYlzqS57titVcbbVJMKI,12214
17
- coverage/files.py,sha256=0qz-Jfiw6pYNFeKG9sIu42D3nq9HRLzzzutFSPSH5Qc,19942
18
- coverage/html.py,sha256=bKIe8ojFHvZDyYT6EFrSU3zcA3KfDgmytqj3J4on7dE,30147
19
- coverage/inorout.py,sha256=NzB-raKdxtzyObxyVPIO8JZ-_Ud_AwHTuHhbdUUUSs8,24441
20
- coverage/jsonreport.py,sha256=bkl2DggQRaxL5p2geBt0Vd1ffgiI-vjj1HUTY5QMklw,6919
21
- coverage/lcovreport.py,sha256=5vgS_HkT_Rq5gCxLKUyv79h-hTdk7qoTPUS0dE621rg,8127
22
- coverage/misc.py,sha256=zQUXYuWhfi5W5PIx2OU9Lxj2NgPEyy5j7IZUY6lBspQ,11591
23
- coverage/multiproc.py,sha256=qAxRi2Jc19a7DVp1hgUZP6JyNF5l3nLmjGcBD-aiZ08,4310
24
- coverage/numbits.py,sha256=YWRSkT-8872C-XtEzxTl1Uk9aoFKUjFbdKkNtYPKGEc,4819
25
- coverage/parser.py,sha256=V7ABRhYthe-RpQ_2wlrC2QaPRybUfEGu6pQWkf6tSUQ,52061
26
- coverage/phystokens.py,sha256=R989TrsFcuZx7x2kBOZmOyQc7z_7QrA3d1cWcRBEGas,7735
27
- coverage/plugin.py,sha256=V1h7GiWKYGpZYISOHfr69lPK4K2f5XYa0o60XtrvVSk,22214
28
- coverage/plugin_support.py,sha256=T9B3CF6OdI07ICQoq18AaCRj-h3xBkOxz8FEuSlsbtc,10609
29
- coverage/py.typed,sha256=QhKiyYY18iX2PTjtgwSYebGpYvH_m0bYEyU_kMST7EU,73
30
- coverage/python.py,sha256=02kieGCrvS_DQhE3xIHZkJX9__ItYR5K9mm55eQ7-xU,8745
31
- coverage/pytracer.py,sha256=I-11n12PEO4OHv4vVUn7CmZixmU_HtN-P87edbL2b3I,15448
32
- coverage/regions.py,sha256=5ls28y7vlhby3m-Vs6vuvT3u61b23ivL1x6zrf_LYAY,4623
33
- coverage/report.py,sha256=C-Gp3GBBUQ-NUEwCTzEjj_j-JwdHceNkjdUJMnSU5QE,10876
34
- coverage/report_core.py,sha256=Ar6U6I3hf8Pu8jIfYmW-MXmlrlcfTzt2r8FeVW9oBvA,4196
35
- coverage/results.py,sha256=-0bkb0tc-CSCvLvuMMOwOa_hewtSn8N7iVCdZoFCEeI,14120
36
- coverage/sqldata.py,sha256=XvLEju-FpfFoy-EZffWQLaCgLlw23w5beM3J4xWU1Vk,44615
37
- coverage/sqlitedb.py,sha256=SVQ0qLHKWTZgxgw59LvZOpxAiNN7MZXn4Vy3RBki3n4,9931
38
- coverage/sysmon.py,sha256=Er7d93GAlvN7SMxSAlPjGBWsP_rh8MonvvM7S_pwn80,16305
39
- coverage/templite.py,sha256=CrVt52hhVQxkEY7R9-LV5MBrHnDAoe8xBG1XYIwUPlc,11114
40
- coverage/tomlconfig.py,sha256=VOHVjOI6bMeso-xinoLHPp9AgqPV7okin9pEywrYKoc,7801
41
- coverage/tracer.cp311-win_amd64.pyd,sha256=FVquyeF2l3omvkJTXR21av5s86tzNlElpndteXZTdM0,22016
42
- coverage/tracer.pyi,sha256=A_x3UrAuonDZaQlhcaTJCOA4YgsgLXnG1ZffeNGZ6OM,1244
43
- coverage/types.py,sha256=HTk2YiapshzP2zc5Xu4wJirIOc3hDtiGKHGmXEwZcQM,5851
44
- coverage/version.py,sha256=B9iFoz1OQBNts5KSv5UdQeFXlfgAE-8KOzcKyRvSVEs,1481
45
- coverage/xmlreport.py,sha256=R2-2XLNcJuOUydaB5KnVvlCJu3H3vGhxJI0erdm11Qo,10063
46
- coverage/htmlfiles/coverage_html.js,sha256=PqDTAlVdIaB9gIjEf6JHHysMm_D7HyRe4BzQFfpf3OM,26207
47
- coverage/htmlfiles/favicon_32.png,sha256=vIEA-odDwRvSQ-syWfSwEnWGUWEv2b-Tv4tzTRfwJWE,1732
48
- coverage/htmlfiles/index.html,sha256=eciDXoye0zDRlWUY5q4HHlE1FPVG4_y0NZ9_OIwaQ0E,7005
49
- coverage/htmlfiles/keybd_closed.png,sha256=fZv4rmY3DkNJtPQjrFJ5UBOE5DdNof3mdeCZWC7TOoo,9004
50
- coverage/htmlfiles/pyfile.html,sha256=dJV8bc3mMQz6J_N2KxVMXNKVge6vnMiQiqqe1QYuZmw,6643
51
- coverage/htmlfiles/style.css,sha256=hEsJogNnNUUQOvNJRwR2OqJhmcsn03tRhuNWoc2g3VQ,14414
52
- coverage/htmlfiles/style.scss,sha256=VtMzE1jNJhiN0Ih6mhJ0niyxr9UIYyYtirIe-QVq_vs,19217
53
- coverage-7.6.7.dist-info/LICENSE.txt,sha256=6z17VIVGasvYHytJb1latjfSeS4mggayfZnnk722dUk,10351
54
- coverage-7.6.7.dist-info/METADATA,sha256=1ukZEqJzoGxbRjc_rey2c4Es9AH0Uk9uqFyvv26ZA3M,8404
55
- coverage-7.6.7.dist-info/WHEEL,sha256=my4ecDMeTkOe_7aeLBL_U0dqitPtfIx-YnzDbUy-lzw,101
56
- coverage-7.6.7.dist-info/entry_points.txt,sha256=1YZ9VNHzvplT76fAhqRNQLG8wmPI5AtUKig-3sjqQJo,123
57
- coverage-7.6.7.dist-info/top_level.txt,sha256=BjhyiIvusb5OJkqCXjRncTF3soKF-mDOby-hxkWwwv0,9
58
- coverage-7.6.7.dist-info/RECORD,,