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

fix: better error printouts #442

Merged
merged 9 commits into from Mar 2, 2022
Merged

Conversation

henryiii
Copy link
Contributor

@henryiii henryiii commented Feb 25, 2022

This is the remainder of the changes made while working on #436. The key
change is the reworking of the error messages; if the venv builder fails,
there's much nicer error message now. Stdout/stderr are no longer hidden, which
revealed the true cause of the failure1; a from None was added to reduce
the useless part of the printout for the builder exception (which already
"remembers" the parent exception in the constructor).

The other changes are minor cleanups noticed along the way, and are organized
by commit, feel free to look at the commits to see them individually; combined
here because our CI is large and clogs other PyPA projects.

Typing:

  • chore(types): clean up over typing
  • chore: bump mypy version
  • chore: use sys.platform over os.name (supported by mypy)

Modernization:

  • env: use subprocess.run instead of check_output
  • env: update old mention of Python 2

Error printouts:

  • env: better error handling for failures creating venv
  • main: nicer printout of errors, including out/err
  • env: from None added, reducing useless printout

Footnotes

  1. This does change the type of the exception given when venv creation
    fails, but this should be a rare and broken thing anyway, so having a new
    custom exception for it seems fine for a 0.8 release.

pyproject.toml Outdated Show resolved Hide resolved
@@ -71,7 +71,7 @@ def _setup_cli() -> None:
colorama.init() # fix colors on windows


def _error(msg: str, code: int = 1) -> None: # pragma: no cover
def _error(msg: str, code: int = 1) -> NoReturn: # pragma: no cover
Copy link
Contributor Author

@henryiii henryiii Feb 25, 2022

Choose a reason for hiding this comment

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

This allows the function to serve as a guard below (and is correct).

src/build/env.py Outdated
@@ -260,7 +260,12 @@ def _create_isolated_env_venv(path: str) -> Tuple[str, str]:

import packaging.version

venv.EnvBuilder(with_pip=True, symlinks=_fs_supports_symlink()).create(path)
simlinks = _fs_supports_symlink()
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Moved here to make --showlocals more useful in pytest.

Copy link
Member

Choose a reason for hiding this comment

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

Typo, should be symlinks.

pyproject.toml Show resolved Hide resolved
src/build/__main__.py Outdated Show resolved Hide resolved
@henryiii
Copy link
Contributor Author

That hardcoded line number that might move is very annoying...

@henryiii
Copy link
Contributor Author

(You can click "force-pushed" above to see what changed.) I've added tests for broken venv, simplified the printout code a tiny bit, removed the unneeded line pointed out by @layday, and tried to fix the moving code issue in the tests.

@henryiii
Copy link
Contributor Author

henryiii commented Mar 1, 2022

Any reviews?

@gaborbernat gaborbernat merged commit 5d711b4 into pypa:main Mar 2, 2022
@henryiii henryiii deleted the henryiii/chore/all branch March 3, 2022 05:02
inmantaci pushed a commit to inmanta/inmanta-core that referenced this pull request May 23, 2022
Bumps [build](https://github.com/pypa/build) from 0.7.0 to 0.8.0.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/pypa/build/blob/main/CHANGELOG.rst">build's changelog</a>.</em></p>
<blockquote>
<h1>0.8.0 (2022-05-22)</h1>
<ul>
<li>Accept <code>os.PathLike[str]</code> in addition to <code>str</code> for paths in public
API (<code>PR [#392](https://github.com/pypa/build/issues/392)</code><em>, Fixes <code>[#372](https://github.com/pypa/build/issues/372)</code></em>)</li>
<li>Add schema validation for <code>build-system</code> table to check conformity
with PEP 517 and PEP 518 (<code>PR [#365](https://github.com/pypa/build/issues/365)</code><em>, Fixes <code>[#364](https://github.com/pypa/build/issues/364)</code></em>)</li>
<li>Better support for Python 3.11 (sysconfig schemes <code>PR [#434](https://github.com/pypa/build/issues/434)</code><em>,  <code>PR [#463](https://github.com/pypa/build/issues/463)</code></em>, tomllib <code>PR [#443](https://github.com/pypa/build/issues/443)</code><em>, warnings <code>PR [#420](https://github.com/pypa/build/issues/420)</code></em>)</li>
<li>Improved error printouts (<code>PR [#442](https://github.com/pypa/build/issues/442)</code>_)</li>
<li>Avoid importing packaging unless needed (<code>PR [#395](https://github.com/pypa/build/issues/395)</code><em>, Fixes <code>[#393](https://github.com/pypa/build/issues/393)</code></em>)</li>
</ul>
<h2>Breaking Changes</h2>
<ul>
<li>Failure to create a virtual environment in the <code>build.env</code> module now raises
<code>build.FailedProcessError</code> (<code>PR [#442](https://github.com/pypa/build/issues/442)</code>_)</li>
</ul>
<p>.. _PR <a href="https://github-redirect.dependabot.com/pypa/build/issues/365">#365</a>: <a href="https://github-redirect.dependabot.com/pypa/build/pull/365">pypa/build#365</a>
.. _PR <a href="https://github-redirect.dependabot.com/pypa/build/issues/392">#392</a>: <a href="https://github-redirect.dependabot.com/pypa/build/pull/392">pypa/build#392</a>
.. _PR <a href="https://github-redirect.dependabot.com/pypa/build/issues/395">#395</a>: <a href="https://github-redirect.dependabot.com/pypa/build/pull/395">pypa/build#395</a>
.. _PR <a href="https://github-redirect.dependabot.com/pypa/build/issues/420">#420</a>: <a href="https://github-redirect.dependabot.com/pypa/build/pull/420">pypa/build#420</a>
.. _PR <a href="https://github-redirect.dependabot.com/pypa/build/issues/434">#434</a>: <a href="https://github-redirect.dependabot.com/pypa/build/pull/434">pypa/build#434</a>
.. _PR <a href="https://github-redirect.dependabot.com/pypa/build/issues/442">#442</a>: <a href="https://github-redirect.dependabot.com/pypa/build/pull/442">pypa/build#442</a>
.. _PR <a href="https://github-redirect.dependabot.com/pypa/build/issues/443">#443</a>: <a href="https://github-redirect.dependabot.com/pypa/build/pull/443">pypa/build#443</a>
.. _PR <a href="https://github-redirect.dependabot.com/pypa/build/issues/463">#463</a>: <a href="https://github-redirect.dependabot.com/pypa/build/pull/463">pypa/build#463</a>
.. _<a href="https://github-redirect.dependabot.com/pypa/build/issues/364">#364</a>: <a href="https://github-redirect.dependabot.com/pypa/build/issues/364">pypa/build#364</a>
.. _<a href="https://github-redirect.dependabot.com/pypa/build/issues/372">#372</a>: <a href="https://github-redirect.dependabot.com/pypa/build/issues/372">pypa/build#372</a>
.. _<a href="https://github-redirect.dependabot.com/pypa/build/issues/393">#393</a>: <a href="https://github-redirect.dependabot.com/pypa/build/pull/393">pypa/build#393</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/pypa/build/commit/6d97b86298d1663814ad74c22a1b4c0b3ce479c9"><code>6d97b86</code></a> release 0.8.0</li>
<li><a href="https://github.com/pypa/build/commit/a3a4bf2de24e4924465020340beec8938cd21e21"><code>a3a4bf2</code></a> tests: include logging info on failures</li>
<li><a href="https://github.com/pypa/build/commit/e76be1a00207b3a75bb72931247403352e84906f"><code>e76be1a</code></a> chore: bump mypy version</li>
<li><a href="https://github.com/pypa/build/commit/798a1983c9cbbae4fb7cf015704e8a532633b08c"><code>798a198</code></a> Changed ambigous date format to ISO</li>
<li><a href="https://github.com/pypa/build/commit/641d7dd2497cf5fada238efd601ca0c1fd39fd95"><code>641d7dd</code></a> ci: update actions</li>
<li><a href="https://github.com/pypa/build/commit/cb3eaa093dbd830d55dd6ab538c7bc27d9ed4dd7"><code>cb3eaa0</code></a> chore: minor style check additions</li>
<li><a href="https://github.com/pypa/build/commit/0c191b4572f457b5527ae21c9c08f9687eb5a55f"><code>0c191b4</code></a> chore: minor cleanups from <a href="https://github-redirect.dependabot.com/pypa/build/issues/361">#361</a></li>
<li><a href="https://github.com/pypa/build/commit/91c7a750f6222958019df57e9da9e82197c9205f"><code>91c7a75</code></a> docs: update changelog</li>
<li><a href="https://github.com/pypa/build/commit/bebe815f55f9a0e2ef7dce5434f0137ff4355475"><code>bebe815</code></a> tests: faster testing with less duplication</li>
<li><a href="https://github.com/pypa/build/commit/cb394c6ae89d61e991e813156e1b42dc9e0fadb2"><code>cb394c6</code></a> PyPy &gt;= 7.3.9 fixed the venv problem on windows</li>
<li>Additional commits viewable in <a href="https://github.com/pypa/build/compare/0.7.0...0.8.0">compare view</a></li>
</ul>
</details>
<br />

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=build&package-manager=pip&previous-version=0.7.0&new-version=0.8.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

</details>
inmantaci pushed a commit to inmanta/inmanta-core that referenced this pull request May 23, 2022
Bumps [build](https://github.com/pypa/build) from 0.7.0 to 0.8.0.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/pypa/build/blob/main/CHANGELOG.rst">build's changelog</a>.</em></p>
<blockquote>
<h1>0.8.0 (2022-05-22)</h1>
<ul>
<li>Accept <code>os.PathLike[str]</code> in addition to <code>str</code> for paths in public
API (<code>PR [#392](https://github.com/pypa/build/issues/392)</code><em>, Fixes <code>[#372](https://github.com/pypa/build/issues/372)</code></em>)</li>
<li>Add schema validation for <code>build-system</code> table to check conformity
with PEP 517 and PEP 518 (<code>PR [#365](https://github.com/pypa/build/issues/365)</code><em>, Fixes <code>[#364](https://github.com/pypa/build/issues/364)</code></em>)</li>
<li>Better support for Python 3.11 (sysconfig schemes <code>PR [#434](https://github.com/pypa/build/issues/434)</code><em>,  <code>PR [#463](https://github.com/pypa/build/issues/463)</code></em>, tomllib <code>PR [#443](https://github.com/pypa/build/issues/443)</code><em>, warnings <code>PR [#420](https://github.com/pypa/build/issues/420)</code></em>)</li>
<li>Improved error printouts (<code>PR [#442](https://github.com/pypa/build/issues/442)</code>_)</li>
<li>Avoid importing packaging unless needed (<code>PR [#395](https://github.com/pypa/build/issues/395)</code><em>, Fixes <code>[#393](https://github.com/pypa/build/issues/393)</code></em>)</li>
</ul>
<h2>Breaking Changes</h2>
<ul>
<li>Failure to create a virtual environment in the <code>build.env</code> module now raises
<code>build.FailedProcessError</code> (<code>PR [#442](https://github.com/pypa/build/issues/442)</code>_)</li>
</ul>
<p>.. _PR <a href="https://github-redirect.dependabot.com/pypa/build/issues/365">#365</a>: <a href="https://github-redirect.dependabot.com/pypa/build/pull/365">pypa/build#365</a>
.. _PR <a href="https://github-redirect.dependabot.com/pypa/build/issues/392">#392</a>: <a href="https://github-redirect.dependabot.com/pypa/build/pull/392">pypa/build#392</a>
.. _PR <a href="https://github-redirect.dependabot.com/pypa/build/issues/395">#395</a>: <a href="https://github-redirect.dependabot.com/pypa/build/pull/395">pypa/build#395</a>
.. _PR <a href="https://github-redirect.dependabot.com/pypa/build/issues/420">#420</a>: <a href="https://github-redirect.dependabot.com/pypa/build/pull/420">pypa/build#420</a>
.. _PR <a href="https://github-redirect.dependabot.com/pypa/build/issues/434">#434</a>: <a href="https://github-redirect.dependabot.com/pypa/build/pull/434">pypa/build#434</a>
.. _PR <a href="https://github-redirect.dependabot.com/pypa/build/issues/442">#442</a>: <a href="https://github-redirect.dependabot.com/pypa/build/pull/442">pypa/build#442</a>
.. _PR <a href="https://github-redirect.dependabot.com/pypa/build/issues/443">#443</a>: <a href="https://github-redirect.dependabot.com/pypa/build/pull/443">pypa/build#443</a>
.. _PR <a href="https://github-redirect.dependabot.com/pypa/build/issues/463">#463</a>: <a href="https://github-redirect.dependabot.com/pypa/build/pull/463">pypa/build#463</a>
.. _<a href="https://github-redirect.dependabot.com/pypa/build/issues/364">#364</a>: <a href="https://github-redirect.dependabot.com/pypa/build/issues/364">pypa/build#364</a>
.. _<a href="https://github-redirect.dependabot.com/pypa/build/issues/372">#372</a>: <a href="https://github-redirect.dependabot.com/pypa/build/issues/372">pypa/build#372</a>
.. _<a href="https://github-redirect.dependabot.com/pypa/build/issues/393">#393</a>: <a href="https://github-redirect.dependabot.com/pypa/build/pull/393">pypa/build#393</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/pypa/build/commit/6d97b86298d1663814ad74c22a1b4c0b3ce479c9"><code>6d97b86</code></a> release 0.8.0</li>
<li><a href="https://github.com/pypa/build/commit/a3a4bf2de24e4924465020340beec8938cd21e21"><code>a3a4bf2</code></a> tests: include logging info on failures</li>
<li><a href="https://github.com/pypa/build/commit/e76be1a00207b3a75bb72931247403352e84906f"><code>e76be1a</code></a> chore: bump mypy version</li>
<li><a href="https://github.com/pypa/build/commit/798a1983c9cbbae4fb7cf015704e8a532633b08c"><code>798a198</code></a> Changed ambigous date format to ISO</li>
<li><a href="https://github.com/pypa/build/commit/641d7dd2497cf5fada238efd601ca0c1fd39fd95"><code>641d7dd</code></a> ci: update actions</li>
<li><a href="https://github.com/pypa/build/commit/cb3eaa093dbd830d55dd6ab538c7bc27d9ed4dd7"><code>cb3eaa0</code></a> chore: minor style check additions</li>
<li><a href="https://github.com/pypa/build/commit/0c191b4572f457b5527ae21c9c08f9687eb5a55f"><code>0c191b4</code></a> chore: minor cleanups from <a href="https://github-redirect.dependabot.com/pypa/build/issues/361">#361</a></li>
<li><a href="https://github.com/pypa/build/commit/91c7a750f6222958019df57e9da9e82197c9205f"><code>91c7a75</code></a> docs: update changelog</li>
<li><a href="https://github.com/pypa/build/commit/bebe815f55f9a0e2ef7dce5434f0137ff4355475"><code>bebe815</code></a> tests: faster testing with less duplication</li>
<li><a href="https://github.com/pypa/build/commit/cb394c6ae89d61e991e813156e1b42dc9e0fadb2"><code>cb394c6</code></a> PyPy &gt;= 7.3.9 fixed the venv problem on windows</li>
<li>Additional commits viewable in <a href="https://github.com/pypa/build/compare/0.7.0...0.8.0">compare view</a></li>
</ul>
</details>
<br />

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=build&package-manager=pip&previous-version=0.7.0&new-version=0.8.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

</details>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants