Skip to main content

issue-watcher

Sometimes it happens that you discover a bug in a library that you are using and have to create a workaround (technical debt). However, it would be good to also remove the workaround once a bugfix is released.

This library provides several useful assertions that are watching when an issue is closed and failing a test to let you know fixed functionality is available. A good way to automatically manage and reduce known technical debt.

PyPI - Downloads CircleCI Codecov PyPI - License PyPI - Python Version GitHub tag (latest SemVer) Maintenance GitHub last commit

Installation

pip install issue-watcher

Support

Issue trackers

  • GitHub

Usage

Let's assume you want to watch a Safety issue #119 preventing you from running the tool on Windows. Once fixed, you would like to enable it on Windows.

Following examples will show typical steps you would take and automation available from this package.

Issue is open

You would like to be notified once the issue is resolved (closed) and enable the currently disabled behaviour. To get notified in relevant place, create the following test case:

from unittest import TestCase

from issuewatcher import AssertGitHubIssue

class BugsInSafetyAreFixedTestCase(TestCase):
    def test_safety_cannot_be_enable_on_windows(self):
        AssertGitHubIssue("pyupio/safety").is_open(
            119, "Check if safety can be enabled on Windows."
        )

Alternatively, with pytest:

from issuewatcher import AssertGitHubIssue

def test_safety_cannot_be_enable_on_windows(self):
    AssertGitHubIssue("pyupio/safety").is_open(
        119, "Check if safety can be enabled on Windows."
    )

Once the issue is closed on GitHub, the test will fail with the following error message:

GitHub issue #119 from 'pyupio/safety' is no longer open. Check if safety 
can be enabled on Windows. Visit https://github.com/pyupio/safety/issues/119.

Issues is closed ...

You can update the test case to watch if issue is not re-opened. Change the test case from:

def test_safety_cannot_be_enable_on_windows(self):
    AssertGitHubIssue("pyupio/safety").is_open(
        119, "Check if safety can be enabled on Windows."
    )

to

def test_safety_can_be_enable_on_windows(self):
    AssertGitHubIssue("pyupio/safety").is_closed(
        119, "Check if safety should be disabled on Windows."
    )

The updated test case will now fail if issue gets re-opened.

... but fix is not released yet

To watch for the fix to be released, you can add a release watch test.

I don't know which version will contain the fix

Assuming that there are 25 releases at the moment of writing the test:

def test_safety_fix_has_not_been_released(self):
    AssertGitHubIssue("pyupio/safety").current_release(25)

If you're not sure how many releases there are at the moment, you can leave the release number empty:

def test_safety_fix_has_not_been_released(self):
    AssertGitHubIssue("pyupio/safety").current_release()

and the test will report it in the failing test:

This test does not have any number of releases set. Current number of releases is '25'.

I know the version of a release that will contain the fix

Sometimes the maintainer will mention which release will include the fix. Let's assume the release will be 2.0.0. To get notified about it, use:

def test_safety_fix_has_not_been_released(self):
    AssertGitHubIssue("pyupio/safety").fixed_in("2.0.0")

Fix is released

Once a new release is available, the test above will fail with:

New release of 'pyupio/safety' is available. Expected 25 releases but 26 are
now available. Visit https://github.com/pyupio/safety/releases.

or

Release '2.0.0' of 'pyupio/safety' is available. Latest version is
'2.2.4'. Visit https://github.com/pyupio/safety/releases.

Now you can remove the tech debt and the release test case. However, keep the issue status test case to check for a regression.

Environment variables

GITHUB_USER_NAME, GITHUB_PERSONAL_ACCESS_TOKEN: Set to GitHub user name and personal access token to raise API limit from 60 requests/hour for a host to 5000 requests/hour on that API key.

CACHE_INVALIDATION_IN_SECONDS: Set to number of seconds for invalidating cached data retrieved from HTTP calls. Default value is 3600 seconds (1 day). Use 0 to disable caching. This is useful if you run tests frequently to speed them up and prevent API quota depletion.

Metadata

Release files for issue-watcher 5.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for issue-watcher 5.0.0
File Size Uploaded Provenance Actions
issue_watcher-5.0.0.tar.gz 10.7 kB Without provenance Details for issue_watcher-5.0.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for issue-watcher 5.0.0
File Interpreter ABI Platform Actions
issue_watcher-5.0.0-py3-none-any.whl Python 3 none any Details for issue_watcher-5.0.0-py3-none-any.whl

Total release size: 19.7 kB

Release files / issue_watcher-5.0.0.tar.gz

Download URL issue_watcher-5.0.0.tar.gz
Size 10.7 kB
Tags Source
SHA-256 checksum
How to use checksums
40c1fdac810a9e2ecff6abd90c1967e41123713d9ef853494d548aab2eb81dab
BLAKE2b-256 checksum
How to use checksums
2fd289982c18fb5f151085adf2627100d56436ca7ca22bf60c1d6ef90a239a4a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.3.1 CPython/3.7.16 Linux/5.15.0-1021-aws

Release files / issue_watcher-5.0.0-py3-none-any.whl

Download URL issue_watcher-5.0.0-py3-none-any.whl
Size 9.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
489de0d37fe634e205be273abbc3ee0cca0a3b20d4267eb636869dae711ea195
BLAKE2b-256 checksum
How to use checksums
9ee8bba06119cb104d14d9adf39ecdef15471873dd8d59c31c0190338474edcb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.3.1 CPython/3.7.16 Linux/5.15.0-1021-aws

Security for issue-watcher 5.0.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page