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

Support recursive extras defined in pyproject.toml #2905

Merged
merged 3 commits into from Jan 29, 2023

Conversation

masenf
Copy link
Collaborator

@masenf masenf commented Jan 28, 2023

With this change, tox will now expand self-referential extras discovered in package deps to respect local modifications to package metadata. This allows a package extra to explicitly depend on another package extra, which previously only worked with non-static metadata.

Fix #2904

Thanks for contribution

Please, make sure you address all the checklists (for details on how see
development documentation)!

  • ran the linter to address style issues (tox -e fix)
  • wrote descriptive pull request text
  • ensured there are test(s) validating the fix
  • added news fragment in docs/changelog folder
  • updated/extended the documentation

@masenf
Copy link
Collaborator Author

masenf commented Jan 28, 2023

Thought about this implementation a bit and it could get stuck in an infinite loop if there is a circular extras chain. Need up update the code to only visit each extra once.

Edit: latest commit avoids the infinite loop and adds a test for it; not sure if i should also add an escape hatch to the test? Currently it just gets stuck in an infinite loop and needs to be interrupted.

@masenf
Copy link
Collaborator Author

masenf commented Jan 28, 2023

Pushed another test case for when the package deps themselves reference an extra, and this currently fails. So I'm going to fix that as well and unify the extra unroll routines in tox/src/tox/tox_env/python/virtual_env/package/util.py so both metadata and pyproject can use the same algorithm.

the project depends on an extra defined within itself
Expand extras that reference an extra of the same package name to respect local
changes to package metadata.

Fix tox-dev#2904
@gaborbernat gaborbernat merged commit 3295838 into tox-dev:main Jan 29, 2023
descope bot added a commit to descope/django-descope that referenced this pull request Feb 14, 2023
This PR contains the following updates:

| Package | Type | Update | Change | Pending |
|---|---|---|---|---|
| [tox](https://togithub.com/tox-dev/tox)
([changelog](https://tox.wiki/en/latest/changelog.html)) | dev | patch |
`4.4.2` -> `4.4.3` | `4.4.5` (+1) |

---

### Release Notes

<details>
<summary>tox-dev/tox</summary>

### [`v4.4.3`](https://togithub.com/tox-dev/tox/releases/tag/4.4.3)

[Compare Source](https://togithub.com/tox-dev/tox/compare/4.4.2...4.4.3)

#### What's Changed

- \[changelog.rst] typo fix by
[@&#8203;sparkiegeek](https://togithub.com/sparkiegeek) in
[tox-dev/tox#2900
- Support recursive extras defined in pyproject.toml by
[@&#8203;masenf](https://togithub.com/masenf) in
[tox-dev/tox#2905
- fix assertions in test_graph to actually test results by
[@&#8203;asottile](https://togithub.com/asottile) in
[tox-dev/tox#2906
- Avoid `pre-commit` `isort` crash by
[@&#8203;gschaffner](https://togithub.com/gschaffner) in
[tox-dev/tox#2908
- docs/faq.rst: clarify how constrain_package_deps works by
[@&#8203;masenf](https://togithub.com/masenf) in
[tox-dev/tox#2902

#### New Contributors

- [@&#8203;sparkiegeek](https://togithub.com/sparkiegeek) made their
first contribution in
[tox-dev/tox#2900
- [@&#8203;gschaffner](https://togithub.com/gschaffner) made their first
contribution in
[tox-dev/tox#2908

**Full Changelog**: tox-dev/tox@4.4.2...4.4.3

</details>

---

### Configuration

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

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, 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

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNC4xMDEuMCIsInVwZGF0ZWRJblZlciI6IjM0LjEwMS4wIn0=-->

Co-authored-by: descope[bot] <descope[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Indirect Extra-Dependencies use dependency metadata from PyPI
2 participants