Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

A way to get report data in detail #1793

Closed
werney opened this issue May 27, 2024 · 15 comments
Closed

A way to get report data in detail #1793

werney opened this issue May 27, 2024 · 15 comments
Labels
enhancement New feature or request fixed

Comments

@werney
Copy link

werney commented May 27, 2024

The report method only returns the total coverage amount. However, sometimes we need this information in detail. For example, I need to know the function-by-function coverage of a file, and I can't do this using the report method. I know it's possible to do this using the html report method, but having the value inside a variable would make it much easier for a more detailed analysis of where the coverage is bad.

So if the report method returned a dictionary, for example, with the names of the functions and their coverage, it would be very useful.

@werney werney added enhancement New feature or request needs triage labels May 27, 2024
@nedbat
Copy link
Owner

nedbat commented May 27, 2024

Take a look at the json report: it has all of the data in a machine-readable format.

@werney
Copy link
Author

werney commented May 27, 2024

I used the json report and the results were the same as the conventional report. Just a summary of the file, it does not have a report by functions like html does. However, extracting this information from an HTML file is quite laborious.

@nedbat
Copy link
Owner

nedbat commented May 28, 2024

Ah sorry, you are right: the per-function and per-class information is not yet in the other reports. That won't be hard to add.

@werney
Copy link
Author

werney commented Jun 4, 2024

Can you give me some guidance on how I can do this?

@nedbat
Copy link
Owner

nedbat commented Jun 4, 2024

You could look at the commit that added them to the HTML report. There's a lot of extra stuff happening in that commit, but that's the meat of it.

@devdanzin
Copy link
Contributor

devdanzin commented Jun 5, 2024

Also the commit that added regions helps to understand the approach: 68c5f93

If you're not planning to, I can try to add regions to other kinds of report.

@devdanzin
Copy link
Contributor

I've implemented a simple way to output region stats in the basic report, but would like to get some input about the report design before going further. Basically, we can opt to print stats about files, classes and functions in a single report, or we can do it like the html version and report only on files, or classes, or functions in each report. What's the preferred way?

Here's what I have so far:

> coverage report --functions --classes
Name                         Stmts   Miss Branch BrPart  Cover
--------------------------------------------------------------
c.py                            11      3      0      0    73%
c.py: class A                    1      1      0      0     0%
c.py: class B                    1      1      0      0     0%
c.py: class B.Inner              1      1      0      0     0%
c.py: function A.test            1      1      0      0     0%
c.py: function B.Inner._in       1      1      0      0     0%
c.py: function B.test            1      1      0      0     0%
c.py: function c                 1      0      0      0   100%
d.py                             3      0      0      0   100%
--------------------------------------------------------------
TOTAL                           14      3      0      0    79%

@nedbat
Copy link
Owner

nedbat commented Jun 11, 2024

Thanks for checking in. My gut reaction is that it will be too much information for a plain text report, but I'd like to hear from others. I like the interleaved lines of files/classes/functions, it kind of provides a drill-down right in one place. Now I wonder if that's a better way to organize the HTML report.

If I had to choose a place to start, it would be the JSON report, because it's not space constrained, and it gives access to the data for other programmatic uses.

@devdanzin
Copy link
Contributor

Thanks, I'll try to get it working for the JSON report first then. It should be simple to add functions and classes dictionaries to each reported_file and just add the data by class/function name. I hope to have a PoC working soon.

FWIW I like the current layout of the HTML report, maybe I'm biased because I stared at it for too long, but having a page for each kind of region plus one for files is simple and works for me. It might make sense to add yet another page with interleaved lines, for a quick glimpse of the coverage situation, but retaining the ability to look at only functions or files at a time.

We could also add a --no-files option to the text (and JSON) report, so you can get a report consisting only of functions, or classes, matching the focused views available in the HTML report.

@devdanzin
Copy link
Contributor

Here's what a JSON report looks like with regions enabled by calling coverage json --functions --classes --pretty-print:

{
    "meta": {
        "format": 2,
        "version": "7.5.4a0.dev1",
        "timestamp": "2024-06-13T06:49:42.776728",
        "branch_coverage": true,
        "show_contexts": false
    },
    "files": {
        "c.py": {
            "executed_lines": [
                1,
                2,
                5,
                6,
                9,
                10,
                13,
                14
            ],
            "summary": {
                "covered_lines": 8,
                "num_statements": 11,
                "percent_covered": 72.72727272727273,
                "percent_covered_display": "73",
                "missing_lines": 3,
                "excluded_lines": 0,
                "num_branches": 0,
                "num_partial_branches": 0,
                "covered_branches": 0,
                "missing_branches": 0
            },
            "missing_lines": [
                3,
                7,
                11
            ],
            "excluded_lines": [],
            "executed_branches": [],
            "missing_branches": [],
            "class": {
                "A": {
                    "executed_lines": [],
                    "summary": {
                        "covered_lines": 0,
                        "num_statements": 1,
                        "percent_covered": 0.0,
                        "percent_covered_display": "0",
                        "missing_lines": 1,
                        "excluded_lines": 0,
                        "num_branches": 0,
                        "num_partial_branches": 0,
                        "covered_branches": 0,
                        "missing_branches": 0
                    },
                    "missing_lines": [
                        3
                    ],
                    "excluded_lines": [],
                    "executed_branches": [],
                    "missing_branches": []
                },
                "B": {
                    "executed_lines": [],
                    "summary": {
                        "covered_lines": 0,
                        "num_statements": 1,
                        "percent_covered": 0.0,
                        "percent_covered_display": "0",
                        "missing_lines": 1,
                        "excluded_lines": 0,
                        "num_branches": 0,
                        "num_partial_branches": 0,
                        "covered_branches": 0,
                        "missing_branches": 0
                    },
                    "missing_lines": [
                        7
                    ],
                    "excluded_lines": [],
                    "executed_branches": [],
                    "missing_branches": []
                },
                "B.Inner": {
                    "executed_lines": [],
                    "summary": {
                        "covered_lines": 0,
                        "num_statements": 1,
                        "percent_covered": 0.0,
                        "percent_covered_display": "0",
                        "missing_lines": 1,
                        "excluded_lines": 0,
                        "num_branches": 0,
                        "num_partial_branches": 0,
                        "covered_branches": 0,
                        "missing_branches": 0
                    },
                    "missing_lines": [
                        11
                    ],
                    "excluded_lines": [],
                    "executed_branches": [],
                    "missing_branches": []
                }
            },
            "function": {
                "A.test": {
                    "executed_lines": [],
                    "summary": {
                        "covered_lines": 0,
                        "num_statements": 1,
                        "percent_covered": 0.0,
                        "percent_covered_display": "0",
                        "missing_lines": 1,
                        "excluded_lines": 0,
                        "num_branches": 0,
                        "num_partial_branches": 0,
                        "covered_branches": 0,
                        "missing_branches": 0
                    },
                    "missing_lines": [
                        3
                    ],
                    "excluded_lines": [],
                    "executed_branches": [],
                    "missing_branches": []
                },
                "B.test": {
                    "executed_lines": [],
                    "summary": {
                        "covered_lines": 0,
                        "num_statements": 1,
                        "percent_covered": 0.0,
                        "percent_covered_display": "0",
                        "missing_lines": 1,
                        "excluded_lines": 0,
                        "num_branches": 0,
                        "num_partial_branches": 0,
                        "covered_branches": 0,
                        "missing_branches": 0
                    },
                    "missing_lines": [
                        7
                    ],
                    "excluded_lines": [],
                    "executed_branches": [],
                    "missing_branches": []
                },
                "B.Inner._in": {
                    "executed_lines": [],
                    "summary": {
                        "covered_lines": 0,
                        "num_statements": 1,
                        "percent_covered": 0.0,
                        "percent_covered_display": "0",
                        "missing_lines": 1,
                        "excluded_lines": 0,
                        "num_branches": 0,
                        "num_partial_branches": 0,
                        "covered_branches": 0,
                        "missing_branches": 0
                    },
                    "missing_lines": [
                        11
                    ],
                    "excluded_lines": [],
                    "executed_branches": [],
                    "missing_branches": []
                },
                "c": {
                    "executed_lines": [
                        14
                    ],
                    "summary": {
                        "covered_lines": 1,
                        "num_statements": 1,
                        "percent_covered": 100.0,
                        "percent_covered_display": "100",
                        "missing_lines": 0,
                        "excluded_lines": 0,
                        "num_branches": 0,
                        "num_partial_branches": 0,
                        "covered_branches": 0,
                        "missing_branches": 0
                    },
                    "missing_lines": [],
                    "excluded_lines": [],
                    "executed_branches": [],
                    "missing_branches": []
                }
            }
        },
        "d.py": {
            "executed_lines": [
                1,
                2,
                3
            ],
            "summary": {
                "covered_lines": 3,
                "num_statements": 3,
                "percent_covered": 100.0,
                "percent_covered_display": "100",
                "missing_lines": 0,
                "excluded_lines": 0,
                "num_branches": 0,
                "num_partial_branches": 0,
                "covered_branches": 0,
                "missing_branches": 0
            },
            "missing_lines": [],
            "excluded_lines": [],
            "executed_branches": [],
            "missing_branches": []
        }
    },
    "totals": {
        "covered_lines": 11,
        "num_statements": 14,
        "percent_covered": 78.57142857142857,
        "percent_covered_display": "79",
        "missing_lines": 3,
        "excluded_lines": 0,
        "num_branches": 0,
        "num_partial_branches": 0,
        "covered_branches": 0,
        "missing_branches": 0
    }
}

We might want to add something to meta to indicate what kind of region is included in the report, what do you think?

@nedbat
Copy link
Owner

nedbat commented Jun 13, 2024

I don't see a reason to add to meta, since you can see the region types based on the actual content. Though, we have "branch_coverage": true in the meta which I guess is technically redundant.

I'm wondering about the need for --functions and --classes. We don't have that for the HTML report, but maybe we should?

@devdanzin
Copy link
Contributor

Maybe we don't need --functions and --classes for the JSON, HTML and XML reports, as they are able to include/present all the information on regions in a clear way. I think it'd be good to have those options (or a single --regions one) for the text report, so users can keep the current output format or choose to get a more detailed view.

I'm happy to implement it any way you prefer, and also to iterate on different designs. Should I create a couple of PRs with different designs so you can test them and maybe have others opine? Or is it better to wait and decide on a design before submitting a PR?

@nedbat
Copy link
Owner

nedbat commented Jul 4, 2024

I think regions in the text report is too much. Let's focus on the JSON report for now, since it's effectively a convenient data export mechanism.

@nedbat
Copy link
Owner

nedbat commented Jul 11, 2024

This data is now available in the JSON report as of commit ab609ef.

@nedbat nedbat closed this as completed Jul 11, 2024
@nedbat nedbat added the fixed label Jul 11, 2024
@nedbat
Copy link
Owner

nedbat commented Jul 11, 2024

This is now released as part of coverage 7.6.0.

github-merge-queue bot referenced this issue in rustymotors/server Jul 11, 2024
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [coverage](https://togithub.com/nedbat/coveragepy) | `==7.5.4` ->
`==7.6.0` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/coverage/7.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/coverage/7.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/coverage/7.5.4/7.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/coverage/7.5.4/7.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>nedbat/coveragepy (coverage)</summary>

###
[`v7.6.0`](https://togithub.com/nedbat/coveragepy/blob/HEAD/CHANGES.rst#Version-760--2024-07-11)

[Compare
Source](https://togithub.com/nedbat/coveragepy/compare/7.5.4...7.6.0)

- Exclusion patterns can now be multi-line, thanks to `Daniel Diniz
<pull
1807_>`*. This enables many interesting exclusion use-cases, including
those
requested in issues `118 <issue 118_>`* (entire files), `996 <issue
996_>`\_ (multiple lines only when appearing together), `1741 <issue
1741_>`\_ (remainder of a function), and `1803 <issue 1803_>`\_
(arbitrary sequence of marked lines). See the :ref:`multi_line_exclude`
    section of the docs for more details and examples.

- The JSON report now includes per-function and per-class coverage
information.
Thanks to `Daniel Diniz <pull 1809_>`\_ for getting the work started.
This
    closes `issue 1793`\_ and `issue 1532`\_.

- Fixed an incorrect calculation of "(no class)" lines in the HTML
classes
    report.

-   Python 3.13.0b3 is supported.

.. \_issue
118:[https://github.com/nedbat/coveragepy/issues/118](https://togithub.com/nedbat/coveragepy/issues/118)8
.. \_issue
996[https://github.com/nedbat/coveragepy/issues/996](https://togithub.com/nedbat/coveragepy/issues/996)96
.. \_issue
153[https://github.com/nedbat/coveragepy/issues/1532](https://togithub.com/nedbat/coveragepy/issues/1532)532
.. \_issue
17[https://github.com/nedbat/coveragepy/issues/1741](https://togithub.com/nedbat/coveragepy/issues/1741)1741
.. \_issue
1[https://github.com/nedbat/coveragepy/issues/1793](https://togithub.com/nedbat/coveragepy/issues/1793)/1793
.. \_issue
[https://github.com/nedbat/coveragepy/issues/1803](https://togithub.com/nedbat/coveragepy/issues/1803)s/1803
..
\_pull[https://github.com/nedbat/coveragepy/pull/1807](https://togithub.com/nedbat/coveragepy/pull/1807)ll/1807
..
\_pul[https://github.com/nedbat/coveragepy/pull/1809](https://togithub.com/nedbat/coveragepy/pull/1809)ull/1809

.. \_changes\_7-5-4:

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/rustymotors/server).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MjUuMSIsInVwZGF0ZWRJblZlciI6IjM3LjQyNS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
renovate bot referenced this issue in allenporter/flux-local Jul 11, 2024
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [coverage](https://togithub.com/nedbat/coveragepy) | `==7.5.4` ->
`==7.6.0` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/coverage/7.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/coverage/7.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/coverage/7.5.4/7.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/coverage/7.5.4/7.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>nedbat/coveragepy (coverage)</summary>

###
[`v7.6.0`](https://togithub.com/nedbat/coveragepy/blob/HEAD/CHANGES.rst#Version-760--2024-07-11)

[Compare
Source](https://togithub.com/nedbat/coveragepy/compare/7.5.4...7.6.0)

- Exclusion patterns can now be multi-line, thanks to `Daniel Diniz
<pull
1807_>`*. This enables many interesting exclusion use-cases, including
those
requested in issues `118 <issue 118_>`* (entire files), `996 <issue
996_>`\_ (multiple lines only when appearing together), `1741 <issue
1741_>`\_ (remainder of a function), and `1803 <issue 1803_>`\_
(arbitrary sequence of marked lines). See the :ref:`multi_line_exclude`
    section of the docs for more details and examples.

- The JSON report now includes per-function and per-class coverage
information.
Thanks to `Daniel Diniz <pull 1809_>`\_ for getting the work started.
This
    closes `issue 1793`\_ and `issue 1532`\_.

- Fixed an incorrect calculation of "(no class)" lines in the HTML
classes
    report.

-   Python 3.13.0b3 is supported.

.. \_issue
118:[https://github.com/nedbat/coveragepy/issues/118](https://togithub.com/nedbat/coveragepy/issues/118)8
.. \_issue
996[https://github.com/nedbat/coveragepy/issues/996](https://togithub.com/nedbat/coveragepy/issues/996)96
.. \_issue
153[https://github.com/nedbat/coveragepy/issues/1532](https://togithub.com/nedbat/coveragepy/issues/1532)532
.. \_issue
17[https://github.com/nedbat/coveragepy/issues/1741](https://togithub.com/nedbat/coveragepy/issues/1741)1741
.. \_issue
1[https://github.com/nedbat/coveragepy/issues/1793](https://togithub.com/nedbat/coveragepy/issues/1793)/1793
.. \_issue
[https://github.com/nedbat/coveragepy/issues/1803](https://togithub.com/nedbat/coveragepy/issues/1803)s/1803
..
\_pull[https://github.com/nedbat/coveragepy/pull/1807](https://togithub.com/nedbat/coveragepy/pull/1807)ll/1807
..
\_pul[https://github.com/nedbat/coveragepy/pull/1809](https://togithub.com/nedbat/coveragepy/pull/1809)ull/1809

.. \_changes\_7-5-4:

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/allenporter/flux-local).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MjUuMSIsInVwZGF0ZWRJblZlciI6IjM3LjQyNS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
jooola referenced this issue in hetznercloud/hcloud-python Jul 12, 2024
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [coverage](https://togithub.com/nedbat/coveragepy) | `>=7.5,<7.6` ->
`>=7.6,<7.7` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/coverage/7.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/coverage/7.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/coverage/7.5.4/7.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/coverage/7.5.4/7.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>nedbat/coveragepy (coverage)</summary>

###
[`v7.6.0`](https://togithub.com/nedbat/coveragepy/blob/HEAD/CHANGES.rst#Version-760--2024-07-11)

[Compare
Source](https://togithub.com/nedbat/coveragepy/compare/7.5.4...7.6.0)

- Exclusion patterns can now be multi-line, thanks to `Daniel Diniz
<pull
1807_>`*. This enables many interesting exclusion use-cases, including
those
requested in issues `118 <issue 118_>`* (entire files), `996 <issue
996_>`\_ (multiple lines only when appearing together), `1741 <issue
1741_>`\_ (remainder of a function), and `1803 <issue 1803_>`\_
(arbitrary sequence of marked lines). See the :ref:`multi_line_exclude`
    section of the docs for more details and examples.

- The JSON report now includes per-function and per-class coverage
information.
Thanks to `Daniel Diniz <pull 1809_>`\_ for getting the work started.
This
    closes `issue 1793`\_ and `issue 1532`\_.

- Fixed an incorrect calculation of "(no class)" lines in the HTML
classes
    report.

-   Python 3.13.0b3 is supported.

.. \_issue
118:[https://github.com/nedbat/coveragepy/issues/118](https://togithub.com/nedbat/coveragepy/issues/118)8
.. \_issue
996[https://github.com/nedbat/coveragepy/issues/996](https://togithub.com/nedbat/coveragepy/issues/996)96
.. \_issue
153[https://github.com/nedbat/coveragepy/issues/1532](https://togithub.com/nedbat/coveragepy/issues/1532)532
.. \_issue
17[https://github.com/nedbat/coveragepy/issues/1741](https://togithub.com/nedbat/coveragepy/issues/1741)1741
.. \_issue
1[https://github.com/nedbat/coveragepy/issues/1793](https://togithub.com/nedbat/coveragepy/issues/1793)/1793
.. \_issue
[https://github.com/nedbat/coveragepy/issues/1803](https://togithub.com/nedbat/coveragepy/issues/1803)s/1803
..
\_pull[https://github.com/nedbat/coveragepy/pull/1807](https://togithub.com/nedbat/coveragepy/pull/1807)ll/1807
..
\_pul[https://github.com/nedbat/coveragepy/pull/1809](https://togithub.com/nedbat/coveragepy/pull/1809)ull/1809

.. \_changes\_7-5-4:

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/hetznercloud/hcloud-python).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MjUuMSIsInVwZGF0ZWRJblZlciI6IjM3LjQyNS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
ddl-cedricyoung referenced this issue in dominodatalab/cucu Jul 25, 2024
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change | Age | Adoption | Passing |
Confidence |
|---|---|---|---|---|---|---|---|
|  |  | lockFileMaintenance | All locks refreshed |  |  |  |  |
| [coverage](https://togithub.com/nedbat/coveragepy) | dependencies |
minor | `7.5.4` -> `7.6.0` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/coverage/7.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/coverage/7.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/coverage/7.5.4/7.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/coverage/7.5.4/7.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [importlib-metadata](https://togithub.com/python/importlib_metadata) |
dependencies | minor | `8.0.0` -> `8.2.0` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/importlib-metadata/8.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/importlib-metadata/8.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/importlib-metadata/8.0.0/8.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/importlib-metadata/8.0.0/8.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [pytest](https://togithub.com/pytest-dev/pytest)
([changelog](https://docs.pytest.org/en/stable/changelog.html)) | dev |
minor | `8.2.2` -> `8.3.2` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/pytest/8.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/pytest/8.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/pytest/8.2.2/8.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/pytest/8.2.2/8.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [ruff](https://docs.astral.sh/ruff)
([source](https://togithub.com/astral-sh/ruff),
[changelog](https://togithub.com/astral-sh/ruff/blob/main/CHANGELOG.md))
| dev | patch | `0.5.1` -> `0.5.5` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/ruff/0.5.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/ruff/0.5.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/ruff/0.5.1/0.5.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/ruff/0.5.1/0.5.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [selenium](https://www.selenium.dev) | dependencies | minor | `4.22.0`
-> `4.23.1` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/selenium/4.23.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/selenium/4.23.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/selenium/4.22.0/4.23.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/selenium/4.22.0/4.23.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

🔧 This Pull Request updates lock files to use the latest dependency
versions.

---

### Release Notes

<details>
<summary>nedbat/coveragepy (coverage)</summary>

###
[`v7.6.0`](https://togithub.com/nedbat/coveragepy/blob/HEAD/CHANGES.rst#Version-760--2024-07-11)

[Compare
Source](https://togithub.com/nedbat/coveragepy/compare/7.5.4...7.6.0)

- Exclusion patterns can now be multi-line, thanks to `Daniel Diniz
<pull
1807_>`*. This enables many interesting exclusion use-cases, including
those
requested in issues `118 <issue 118_>`* (entire files), `996 <issue
996_>`\_ (multiple lines only when appearing together), `1741 <issue
1741_>`\_ (remainder of a function), and `1803 <issue 1803_>`\_
(arbitrary sequence of marked lines). See the :ref:`multi_line_exclude`
    section of the docs for more details and examples.

- The JSON report now includes per-function and per-class coverage
information.
Thanks to `Daniel Diniz <pull 1809_>`\_ for getting the work started.
This
    closes `issue 1793`\_ and `issue 1532`\_.

- Fixed an incorrect calculation of "(no class)" lines in the HTML
classes
    report.

-   Python 3.13.0b3 is supported.

.. \_issue
118:[https://github.com/nedbat/coveragepy/issues/118](https://togithub.com/nedbat/coveragepy/issues/118)8
.. \_issue
996[https://github.com/nedbat/coveragepy/issues/996](https://togithub.com/nedbat/coveragepy/issues/996)96
.. \_issue
153[https://github.com/nedbat/coveragepy/issues/1532](https://togithub.com/nedbat/coveragepy/issues/1532)532
.. \_issue
17[https://github.com/nedbat/coveragepy/issues/1741](https://togithub.com/nedbat/coveragepy/issues/1741)1741
.. \_issue
1[https://github.com/nedbat/coveragepy/issues/1793](https://togithub.com/nedbat/coveragepy/issues/1793)/1793
.. \_issue
[https://github.com/nedbat/coveragepy/issues/1803](https://togithub.com/nedbat/coveragepy/issues/1803)s/1803
..
\_pull[https://github.com/nedbat/coveragepy/pull/1807](https://togithub.com/nedbat/coveragepy/pull/1807)ll/1807
..
\_pul[https://github.com/nedbat/coveragepy/pull/1809](https://togithub.com/nedbat/coveragepy/pull/1809)ull/1809

.. \_changes\_7-5-4:

</details>

<details>
<summary>python/importlib_metadata (importlib-metadata)</summary>

###
[`v8.2.0`](https://togithub.com/python/importlib_metadata/compare/v8.1.0...v8.2.0)

[Compare
Source](https://togithub.com/python/importlib_metadata/compare/v8.1.0...v8.2.0)

###
[`v8.1.0`](https://togithub.com/python/importlib_metadata/compare/v8.0.0...v8.1.0)

[Compare
Source](https://togithub.com/python/importlib_metadata/compare/v8.0.0...v8.1.0)

</details>

<details>
<summary>pytest-dev/pytest (pytest)</summary>

###
[`v8.3.2`](https://togithub.com/pytest-dev/pytest/releases/tag/8.3.2)

[Compare
Source](https://togithub.com/pytest-dev/pytest/compare/8.3.1...8.3.2)

# pytest 8.3.2 (2024-07-24)

## Bug fixes

- [#&#8203;12652](https://togithub.com/pytest-dev/pytest/issues/12652):
Resolve regression \[conda]{.title-ref} environments where no longer
being automatically detected.

    \-- by `RonnyPfannschmidt`{.interpreted-text role="user"}

###
[`v8.3.1`](https://togithub.com/pytest-dev/pytest/releases/tag/8.3.1)

[Compare
Source](https://togithub.com/pytest-dev/pytest/compare/8.3.0...8.3.1)

# pytest 8.3.1 (2024-07-20)

The 8.3.0 release failed to include the change notes and docs for the
release. This patch release remedies this. There are no other changes.

###
[`v8.3.0`](https://togithub.com/pytest-dev/pytest/compare/8.2.2...8.3.0)

[Compare
Source](https://togithub.com/pytest-dev/pytest/compare/8.2.2...8.3.0)

</details>

<details>
<summary>astral-sh/ruff (ruff)</summary>

###
[`v0.5.5`](https://togithub.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#055)

[Compare
Source](https://togithub.com/astral-sh/ruff/compare/0.5.4...0.5.5)

##### Preview features

- \[`fastapi`] Implement `fastapi-redundant-response-model` (`FAST001`)
and `fastapi-non-annotated-dependency`(`FAST002`)
([#&#8203;11579](https://togithub.com/astral-sh/ruff/pull/11579))
- \[`pydoclint`] Implement `docstring-missing-exception` (`DOC501`) and
`docstring-extraneous-exception` (`DOC502`)
([#&#8203;11471](https://togithub.com/astral-sh/ruff/pull/11471))

##### Rule changes

- \[`numpy`] Fix NumPy 2.0 rule for `np.alltrue` and `np.sometrue`
([#&#8203;12473](https://togithub.com/astral-sh/ruff/pull/12473))
- \[`numpy`] Ignore `NPY201` inside `except` blocks for compatibility
with older numpy versions
([#&#8203;12490](https://togithub.com/astral-sh/ruff/pull/12490))
- \[`pep8-naming`] Avoid applying `ignore-names` to `self` and `cls`
function names (`N804`, `N805`)
([#&#8203;12497](https://togithub.com/astral-sh/ruff/pull/12497))

##### Formatter

- Fix incorrect placement of leading function comment with type params
([#&#8203;12447](https://togithub.com/astral-sh/ruff/pull/12447))

##### Server

- Do not bail code action resolution when a quick fix is requested
([#&#8203;12462](https://togithub.com/astral-sh/ruff/pull/12462))

##### Bug fixes

- Fix `Ord` implementation of `cmp_fix`
([#&#8203;12471](https://togithub.com/astral-sh/ruff/pull/12471))
- Raise syntax error for unparenthesized generator expression in
multi-argument call
([#&#8203;12445](https://togithub.com/astral-sh/ruff/pull/12445))
- \[`pydoclint`] Fix panic in `DOC501` reported in
[#&#8203;12428](https://togithub.com/astral-sh/ruff/pull/12428)
([#&#8203;12435](https://togithub.com/astral-sh/ruff/pull/12435))
- \[`flake8-bugbear`] Allow singleton tuples with starred expressions in
`B013` ([#&#8203;12484](https://togithub.com/astral-sh/ruff/pull/12484))

##### Documentation

- Add Eglot setup guide for Emacs editor
([#&#8203;12426](https://togithub.com/astral-sh/ruff/pull/12426))
- Add note about the breaking change in `nvim-lspconfig`
([#&#8203;12507](https://togithub.com/astral-sh/ruff/pull/12507))
- Add note to include notebook files for native server
([#&#8203;12449](https://togithub.com/astral-sh/ruff/pull/12449))
- Add setup docs for Zed editor
([#&#8203;12501](https://togithub.com/astral-sh/ruff/pull/12501))

###
[`v0.5.4`](https://togithub.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#054)

[Compare
Source](https://togithub.com/astral-sh/ruff/compare/0.5.3...0.5.4)

##### Rule changes

- \[`ruff`] Rename `RUF007` to `zip-instead-of-pairwise`
([#&#8203;12399](https://togithub.com/astral-sh/ruff/pull/12399))

##### Bug fixes

- \[`flake8-builtins`] Avoid shadowing diagnostics for `@override`
methods
([#&#8203;12415](https://togithub.com/astral-sh/ruff/pull/12415))
- \[`flake8-comprehensions`] Insert parentheses for multi-argument
generators
([#&#8203;12422](https://togithub.com/astral-sh/ruff/pull/12422))
- \[`pydocstyle`] Handle escaped docstrings within docstring (`D301`)
([#&#8203;12192](https://togithub.com/astral-sh/ruff/pull/12192))

##### Documentation

- Fix GitHub link to Neovim setup
([#&#8203;12410](https://togithub.com/astral-sh/ruff/pull/12410))
- Fix `output-format` default in settings reference
([#&#8203;12409](https://togithub.com/astral-sh/ruff/pull/12409))

###
[`v0.5.3`](https://togithub.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#053)

[Compare
Source](https://togithub.com/astral-sh/ruff/compare/0.5.2...0.5.3)

**Ruff 0.5.3 marks the stable release of the Ruff language server and
introduces revamped
[documentation](https://docs.astral.sh/ruff/editors), including [setup
guides for your editor of
choice](https://docs.astral.sh/ruff/editors/setup) and [the language
server
itself](https://docs.astral.sh/ruff/editors/settings)**.

##### Preview features

- Formatter: Insert empty line between suite and alternative branch
after function/class definition
([#&#8203;12294](https://togithub.com/astral-sh/ruff/pull/12294))
- \[`pyupgrade`] Implement `unnecessary-default-type-args` (`UP043`)
([#&#8203;12371](https://togithub.com/astral-sh/ruff/pull/12371))

##### Rule changes

- \[`flake8-bugbear`] Detect enumerate iterations in
`loop-iterator-mutation` (`B909`)
([#&#8203;12366](https://togithub.com/astral-sh/ruff/pull/12366))
- \[`flake8-bugbear`] Remove `discard`, `remove`, and `pop` allowance
for `loop-iterator-mutation` (`B909`)
([#&#8203;12365](https://togithub.com/astral-sh/ruff/pull/12365))
- \[`pylint`] Allow `repeated-equality-comparison` for mixed operations
(`PLR1714`)
([#&#8203;12369](https://togithub.com/astral-sh/ruff/pull/12369))
- \[`pylint`] Ignore `self` and `cls` when counting arguments
(`PLR0913`)
([#&#8203;12367](https://togithub.com/astral-sh/ruff/pull/12367))
- \[`pylint`] Use UTF-8 as default encoding in `unspecified-encoding`
fix (`PLW1514`)
([#&#8203;12370](https://togithub.com/astral-sh/ruff/pull/12370))

##### Server

- Build settings index in parallel for the native server
([#&#8203;12299](https://togithub.com/astral-sh/ruff/pull/12299))
- Use fallback settings when indexing the project
([#&#8203;12362](https://togithub.com/astral-sh/ruff/pull/12362))
- Consider `--preview` flag for `server` subcommand for the linter and
formatter
([#&#8203;12208](https://togithub.com/astral-sh/ruff/pull/12208))

##### Bug fixes

- \[`flake8-comprehensions`] Allow additional arguments for `sum` and
`max` comprehensions (`C419`)
([#&#8203;12364](https://togithub.com/astral-sh/ruff/pull/12364))
- \[`pylint`] Avoid dropping extra boolean operations in
`repeated-equality-comparison` (`PLR1714`)
([#&#8203;12368](https://togithub.com/astral-sh/ruff/pull/12368))
- \[`pylint`] Consider expression before statement when determining
binding kind (`PLR1704`)
([#&#8203;12346](https://togithub.com/astral-sh/ruff/pull/12346))

##### Documentation

- Add docs for Ruff language server
([#&#8203;12344](https://togithub.com/astral-sh/ruff/pull/12344))
- Migrate to standalone docs repo
([#&#8203;12341](https://togithub.com/astral-sh/ruff/pull/12341))
- Update versioning policy for editor integration
([#&#8203;12375](https://togithub.com/astral-sh/ruff/pull/12375))

##### Other changes

- Publish Wasm API to npm
([#&#8203;12317](https://togithub.com/astral-sh/ruff/pull/12317))

###
[`v0.5.2`](https://togithub.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#052)

[Compare
Source](https://togithub.com/astral-sh/ruff/compare/0.5.1...0.5.2)

##### Preview features

- Use `space` separator before parenthesized expressions in
comprehensions with leading comments
([#&#8203;12282](https://togithub.com/astral-sh/ruff/pull/12282))
- \[`flake8-async`] Update `ASYNC100` to include `anyio` and `asyncio`
([#&#8203;12221](https://togithub.com/astral-sh/ruff/pull/12221))
- \[`flake8-async`] Update `ASYNC109` to include `anyio` and `asyncio`
([#&#8203;12236](https://togithub.com/astral-sh/ruff/pull/12236))
- \[`flake8-async`] Update `ASYNC110` to include `anyio` and `asyncio`
([#&#8203;12261](https://togithub.com/astral-sh/ruff/pull/12261))
- \[`flake8-async`] Update `ASYNC115` to include `anyio` and `asyncio`
([#&#8203;12262](https://togithub.com/astral-sh/ruff/pull/12262))
- \[`flake8-async`] Update `ASYNC116` to include `anyio` and `asyncio`
([#&#8203;12266](https://togithub.com/astral-sh/ruff/pull/12266))

##### Rule changes

- \[`flake8-return`] Exempt properties from explicit return rule
(`RET501`)
([#&#8203;12243](https://togithub.com/astral-sh/ruff/pull/12243))
- \[`numpy`] Add `np.NAN`-to-`np.nan` diagnostic
([#&#8203;12292](https://togithub.com/astral-sh/ruff/pull/12292))
- \[`refurb`] Make `list-reverse-copy` an unsafe fix
([#&#8203;12303](https://togithub.com/astral-sh/ruff/pull/12303))

##### Server

- Consider `include` and `extend-include` settings in native server
([#&#8203;12252](https://togithub.com/astral-sh/ruff/pull/12252))
- Include nested configurations in settings reloading
([#&#8203;12253](https://togithub.com/astral-sh/ruff/pull/12253))

##### CLI

- Omit code frames for fixes with empty ranges
([#&#8203;12304](https://togithub.com/astral-sh/ruff/pull/12304))
- Warn about formatter incompatibility for `D203`
([#&#8203;12238](https://togithub.com/astral-sh/ruff/pull/12238))

##### Bug fixes

- Make cache-write failures non-fatal on Windows
([#&#8203;12302](https://togithub.com/astral-sh/ruff/pull/12302))
- Treat `not` operations as boolean tests
([#&#8203;12301](https://togithub.com/astral-sh/ruff/pull/12301))
- \[`flake8-bandit`] Avoid `S310` violations for HTTP-safe f-strings
([#&#8203;12305](https://togithub.com/astral-sh/ruff/pull/12305))
- \[`flake8-bandit`] Support explicit string concatenations in S310 HTTP
detection
([#&#8203;12315](https://togithub.com/astral-sh/ruff/pull/12315))
- \[`flake8-bandit`] fix S113 false positive for httpx without `timeout`
argument
([#&#8203;12213](https://togithub.com/astral-sh/ruff/pull/12213))
- \[`pycodestyle`] Remove "non-obvious" allowance for E721
([#&#8203;12300](https://togithub.com/astral-sh/ruff/pull/12300))
- \[`pyflakes`] Consider `with` blocks as single-item branches for
redefinition analysis
([#&#8203;12311](https://togithub.com/astral-sh/ruff/pull/12311))
- \[`refurb`] Restrict forwarding for `newline` argument in `open()`
calls to Python versions >= 3.10
([#&#8203;12244](https://togithub.com/astral-sh/ruff/pull/12244))

##### Documentation

- Update help and documentation to reflect `--output-format full`
default
([#&#8203;12248](https://togithub.com/astral-sh/ruff/pull/12248))

##### Performance

- Use more threads when discovering Python files
([#&#8203;12258](https://togithub.com/astral-sh/ruff/pull/12258))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "before 4am on monday" in timezone
America/Los_Angeles, Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config help](https://togithub.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View the
[repository job log](https://developer.mend.io/github/cerebrotech/cucu).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MjUuMSIsInVwZGF0ZWRJblZlciI6IjM3LjQzOC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request fixed
Projects
None yet
Development

No branches or pull requests

3 participants