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

cli, state: replace progress spinner with rich.status #283

Merged
merged 2 commits into from May 24, 2022

Conversation

woodruffw
Copy link
Member

This simplifies the spinner implementation quite a bit, and brings us slightly closer in line with pip's already vendored dependencies.

Closes #282.

Signed-off-by: William Woodruff william@trailofbits.com

Signed-off-by: William Woodruff <william@trailofbits.com>
@woodruffw woodruffw added component:cli CLI components refactoring Refactoring tasks. labels May 24, 2022
@woodruffw woodruffw requested review from di and tetsuo-cpp May 24, 2022 19:26
@woodruffw woodruffw self-assigned this May 24, 2022
@woodruffw
Copy link
Member Author

Demos:

Old:

asciicast

New:

asciicast

Note that the new one has a faster startup, and is generally smoother.

super().__init__(message=message, **kwargs)
self._console = Console()
# NOTE: audits can be quite fast, so we need a pretty high refresh rate here.
self._spinner = self._console.status(message, spinner="line", refresh_per_second=30)
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

N.B.: If we wanted to be extra fancy, we could allow users to configure the spinner=... here, rather than using the same "line" spinner that progress uses.

Rich has a decent collection of spinners to choose from:

https://github.com/Textualize/rich/blob/aa7926c1431eebfb2ccaab9f3b63a4ac6cd8dfe6/rich/_spinners.py#L22

@woodruffw
Copy link
Member Author

The new rich.status based spinner also handles long lines gracefully, meaning we don't need our line truncation hack anymore either:

asciicast

Signed-off-by: William Woodruff <william@trailofbits.com>
@woodruffw woodruffw merged commit 0828d9c into main May 24, 2022
@woodruffw woodruffw deleted the ww/rich-spinner branch May 24, 2022 19:51
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request Jul 3, 2022
## [2.3.4]

### Fixed

* Vulnerability fixing: the `--fix` flag now works for vulnerabilities found in
  requirement subdependencies. A new line is now added to the requirement file
  to explicitly pin the offending subdependency
  ([#297](pypa/pip-audit#297))

## [2.3.3]

### Changed

* CLI: `pip-audit` now warns on the combination of `-s osv` and
  `--require-hashes`, notifying users that only the PyPI service
  can fully verify hashes
  ([#298](pypa/pip-audit#298))

### Fixed

* CLI/Dependency sources: `--cache-dir=...` and other flags that affect
  dependency resolver behavior now work correctly when auditing a
  `pyproject.toml` dependency source
  ([#300](pypa/pip-audit#300))

## [2.3.2] - 2022-05-14

### Changed

* CLI: `pip-audit`'s progress spinner has been refactored to make it
  faster and more responsive
  ([#283](pypa/pip-audit#283))

* CLI, Vulnerability sources: the error message used to report
  connection failures to vulnerability sources was improved
  ([#287](pypa/pip-audit#287))

* Vulnerability sources: the OSV service is now more resilient
  to schema changes ([#288](pypa/pip-audit#288))

* Vulnerability sources: the PyPI service provides a better
  error message during some cases of service degradation
  ([#294](pypa/pip-audit#294))

### Fixed

* Vulnerability sources: a bug stemming from an incorrect assumption
  about OSV's schema guarantees was fixed
  ([#284](pypa/pip-audit#284))

* Caching: `pip-audit` now respects `pip`'s `PIP_NO_CACHE_DIR`
  and will not attempt to use the `pip` cache if present
  ([#290](pypa/pip-audit#290))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
component:cli CLI components refactoring Refactoring tasks.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Replace progress with rich
2 participants