mirror of
https://github.com/enpaul/tox-poetry-installer.git
synced 2025-10-28 07:00:43 +00:00
Compare commits
16 Commits
0.10.2
...
9efcea762e
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9efcea762e | ||
|
|
fe95ff5ca1 | ||
|
|
6991f29b4d | ||
|
|
2b8936267e | ||
|
|
3f99f3476c | ||
|
|
46a7619c4f | ||
|
|
c81215bc3b | ||
|
|
0693ce4706 | ||
|
|
a489fe2c53 | ||
|
|
a94933e7ef | ||
|
c55ba474c7
|
|||
| 2b75f74996 | |||
|
449381ca09
|
|||
|
bb44db0f9d
|
|||
|
afaf025485
|
|||
|
c984abbc2f
|
55
CHANGELOG.md
55
CHANGELOG.md
@@ -2,6 +2,14 @@
|
|||||||
|
|
||||||
See also: [Github Release Page](https://github.com/enpaul/tox-poetry-installer/releases).
|
See also: [Github Release Page](https://github.com/enpaul/tox-poetry-installer/releases).
|
||||||
|
|
||||||
|
## Version 0.10.3
|
||||||
|
|
||||||
|
View this release on:
|
||||||
|
[Github](https://github.com/enpaul/tox-poetry-installer/releases/tag/0.10.3),
|
||||||
|
[PyPI](https://pypi.org/project/tox-poetry-installer/0.10.3/)
|
||||||
|
|
||||||
|
- Update Poetry requirement to exclude usage with incompatible 1.5 release
|
||||||
|
|
||||||
## Version 0.10.2
|
## Version 0.10.2
|
||||||
|
|
||||||
View this release on:
|
View this release on:
|
||||||
@@ -60,8 +68,8 @@ View this release on:
|
|||||||
[Github](https://github.com/enpaul/tox-poetry-installer/releases/tag/0.8.4),
|
[Github](https://github.com/enpaul/tox-poetry-installer/releases/tag/0.8.4),
|
||||||
[PyPI](https://pypi.org/project/tox-poetry-installer/0.8.4/)
|
[PyPI](https://pypi.org/project/tox-poetry-installer/0.8.4/)
|
||||||
|
|
||||||
- Fix issue where incompatible package versions were selected for installation when multiple
|
- Fix issue where incompatible package versions were selected for installation when
|
||||||
package versions were in the lockfile
|
multiple package versions were in the lockfile
|
||||||
|
|
||||||
## Version 0.8.3
|
## Version 0.8.3
|
||||||
|
|
||||||
@@ -78,9 +86,9 @@ View this release on:
|
|||||||
[PyPI](https://pypi.org/project/tox-poetry-installer/0.8.2/)
|
[PyPI](https://pypi.org/project/tox-poetry-installer/0.8.2/)
|
||||||
|
|
||||||
- Improve debug-level logging for package installation, and time how long installing each
|
- Improve debug-level logging for package installation, and time how long installing each
|
||||||
package takes. Contributed by [Rebecca
|
package takes. Contributed by [Rebecca Turner](https://github.com/9999years) (#63).
|
||||||
Turner](https://github.com/9999years) (#63).
|
- Fix crash caused by the package-under-test depending on Poetry's unsafe dependencies
|
||||||
- Fix crash caused by the package-under-test depending on Poetry's unsafe dependencies ([#65](https://github.com/enpaul/tox-poetry-installer/issues/65))
|
([#65](https://github.com/enpaul/tox-poetry-installer/issues/65))
|
||||||
|
|
||||||
## Version 0.8.1
|
## Version 0.8.1
|
||||||
|
|
||||||
@@ -130,7 +138,8 @@ View this release on:
|
|||||||
process
|
process
|
||||||
- Add integration with Poetry's compatibility
|
- Add integration with Poetry's compatibility
|
||||||
[`Marker`](https://github.com/python-poetry/poetry-core/blob/master/poetry/core/version/markers.py)
|
[`Marker`](https://github.com/python-poetry/poetry-core/blob/master/poetry/core/version/markers.py)
|
||||||
object system for determining package compatibility with the current platform ([#43](https://github.com/enpaul/tox-poetry-installer/issues/43))
|
object system for determining package compatibility with the current platform
|
||||||
|
([#43](https://github.com/enpaul/tox-poetry-installer/issues/43))
|
||||||
- Add missing PyPI classifier for Python 3
|
- Add missing PyPI classifier for Python 3
|
||||||
|
|
||||||
## Version 0.6.3
|
## Version 0.6.3
|
||||||
@@ -155,8 +164,8 @@ View this release on:
|
|||||||
[CVE-2020-29651](https://nvd.nist.gov/vuln/detail/CVE-2020-29651)
|
[CVE-2020-29651](https://nvd.nist.gov/vuln/detail/CVE-2020-29651)
|
||||||
- Fix dependency identification failing when the package under test is a transient
|
- Fix dependency identification failing when the package under test is a transient
|
||||||
dependency of a locked dependency specified for installation
|
dependency of a locked dependency specified for installation
|
||||||
- Fix `AttributeError` being raised while creating the Tox self-provisioned environment when
|
- Fix `AttributeError` being raised while creating the Tox self-provisioned environment
|
||||||
using either the
|
when using either the
|
||||||
[`minversion`](https://tox.readthedocs.io/en/latest/config.html#conf-minversion) or
|
[`minversion`](https://tox.readthedocs.io/en/latest/config.html#conf-minversion) or
|
||||||
[`requires`](https://tox.readthedocs.io/en/latest/config.html#conf-requires) Tox config
|
[`requires`](https://tox.readthedocs.io/en/latest/config.html#conf-requires) Tox config
|
||||||
options
|
options
|
||||||
@@ -171,8 +180,8 @@ View this release on:
|
|||||||
installation problems
|
installation problems
|
||||||
- Fix regression around handling of Poetry's unsafe packages when the unsafe package is a
|
- Fix regression around handling of Poetry's unsafe packages when the unsafe package is a
|
||||||
transient dependency ([#33](https://github.com/enpaul/tox-poetry-installer/issues/33))
|
transient dependency ([#33](https://github.com/enpaul/tox-poetry-installer/issues/33))
|
||||||
- Fix handling of Poetry's unsafe packages when the unsafe package is a primary (environment
|
- Fix handling of Poetry's unsafe packages when the unsafe package is a primary
|
||||||
or package) dependency
|
(environment or package) dependency
|
||||||
|
|
||||||
## Version 0.6.0
|
## Version 0.6.0
|
||||||
|
|
||||||
@@ -196,7 +205,8 @@ View this release on:
|
|||||||
[Github](https://github.com/enpaul/tox-poetry-installer/releases/tag/0.5.2),
|
[Github](https://github.com/enpaul/tox-poetry-installer/releases/tag/0.5.2),
|
||||||
[PyPI](https://pypi.org/project/tox-poetry-installer/0.5.2/)
|
[PyPI](https://pypi.org/project/tox-poetry-installer/0.5.2/)
|
||||||
|
|
||||||
- Fix always attempting to install dependencies with incompatible python version constraints
|
- Fix always attempting to install dependencies with incompatible python version
|
||||||
|
constraints
|
||||||
- Fix always attempting to install dependencies with incompatible python platforms
|
- Fix always attempting to install dependencies with incompatible python platforms
|
||||||
|
|
||||||
## Version 0.5.1
|
## Version 0.5.1
|
||||||
@@ -218,8 +228,8 @@ View this release on:
|
|||||||
|
|
||||||
- Add option `locked_deps` to better support both locked and unlocked dependencies in a
|
- Add option `locked_deps` to better support both locked and unlocked dependencies in a
|
||||||
single environment
|
single environment
|
||||||
- Add blocking functionality when using `require_locked_deps = true` to prevent other hooks
|
- Add blocking functionality when using `require_locked_deps = true` to prevent other
|
||||||
from running after this one
|
hooks from running after this one
|
||||||
- Update documentation to include new configuration options and errors
|
- Update documentation to include new configuration options and errors
|
||||||
- Update documentation to improve future maintainability
|
- Update documentation to improve future maintainability
|
||||||
- Update module structure to move from single-file module to multi-file directory module
|
- Update module structure to move from single-file module to multi-file directory module
|
||||||
@@ -243,7 +253,8 @@ View this release on:
|
|||||||
[PyPI](https://pypi.org/project/tox-poetry-installer/0.3.1/)
|
[PyPI](https://pypi.org/project/tox-poetry-installer/0.3.1/)
|
||||||
|
|
||||||
- Fix error when installing an environment with no extras specified in the configuration
|
- Fix error when installing an environment with no extras specified in the configuration
|
||||||
- Fix problem where only the dependencies of the sequentially last extra would be installed
|
- Fix problem where only the dependencies of the sequentially last extra would be
|
||||||
|
installed
|
||||||
- Fix regression causing no project dependencies to be installed
|
- Fix regression causing no project dependencies to be installed
|
||||||
|
|
||||||
## Version 0.3.0
|
## Version 0.3.0
|
||||||
@@ -265,7 +276,8 @@ View this release on:
|
|||||||
[Github](https://github.com/enpaul/tox-poetry-installer/releases/tag/0.2.4),
|
[Github](https://github.com/enpaul/tox-poetry-installer/releases/tag/0.2.4),
|
||||||
[PyPI](https://pypi.org/project/tox-poetry-installer/0.2.4/)
|
[PyPI](https://pypi.org/project/tox-poetry-installer/0.2.4/)
|
||||||
|
|
||||||
- Fix support for Poetry-1.1 ([#2](https://github.com/enpaul/tox-poetry-installer/issues/2))
|
- Fix support for Poetry-1.1
|
||||||
|
([#2](https://github.com/enpaul/tox-poetry-installer/issues/2))
|
||||||
- Include tests in sdist ([#8](https://github.com/enpaul/tox-poetry-installer/issues/8))
|
- Include tests in sdist ([#8](https://github.com/enpaul/tox-poetry-installer/issues/8))
|
||||||
|
|
||||||
## Version 0.2.3
|
## Version 0.2.3
|
||||||
@@ -274,8 +286,10 @@ View this release on:
|
|||||||
[Github](https://github.com/enpaul/tox-poetry-installer/releases/tag/0.2.3),
|
[Github](https://github.com/enpaul/tox-poetry-installer/releases/tag/0.2.3),
|
||||||
[PyPI](https://pypi.org/project/tox-poetry-installer/0.2.3/)
|
[PyPI](https://pypi.org/project/tox-poetry-installer/0.2.3/)
|
||||||
|
|
||||||
- Fix usage of the plugin in non-Poetry based projects ([#1](https://github.com/enpaul/tox-poetry-installer/issues/1))
|
- Fix usage of the plugin in non-Poetry based projects
|
||||||
- Fix treating dependency names as case sensitive when they shouldn't be ([#7](https://github.com/enpaul/tox-poetry-installer/issues/7))
|
([#1](https://github.com/enpaul/tox-poetry-installer/issues/1))
|
||||||
|
- Fix treating dependency names as case sensitive when they shouldn't be
|
||||||
|
([#7](https://github.com/enpaul/tox-poetry-installer/issues/7))
|
||||||
|
|
||||||
## Version 0.2.2
|
## Version 0.2.2
|
||||||
|
|
||||||
@@ -284,7 +298,8 @@ View this release on:
|
|||||||
[PyPI](https://pypi.org/project/tox-poetry-installer/0.2.2/)
|
[PyPI](https://pypi.org/project/tox-poetry-installer/0.2.2/)
|
||||||
|
|
||||||
- Fix breaking when running Tox in projects that do not use Poetry for their
|
- Fix breaking when running Tox in projects that do not use Poetry for their
|
||||||
environment/dependency management ([#1](https://github.com/enpaul/tox-poetry-installer/issues/1))
|
environment/dependency management
|
||||||
|
([#1](https://github.com/enpaul/tox-poetry-installer/issues/1))
|
||||||
|
|
||||||
## Version 0.2.1
|
## Version 0.2.1
|
||||||
|
|
||||||
@@ -335,8 +350,8 @@ View this release on:
|
|||||||
[PyPI](https://pypi.org/project/tox-poetry-installer/0.1.2/)
|
[PyPI](https://pypi.org/project/tox-poetry-installer/0.1.2/)
|
||||||
|
|
||||||
- Test trivial functionality on Python-3.6 and Python-3.7
|
- Test trivial functionality on Python-3.6 and Python-3.7
|
||||||
- Fix disagreement between `pyproject.toml` and module metadata on what the current version
|
- Fix disagreement between `pyproject.toml` and module metadata on what the current
|
||||||
is
|
version is
|
||||||
- Fix constant named for PEP-440 that should have been named for PEP-508
|
- Fix constant named for PEP-440 that should have been named for PEP-508
|
||||||
|
|
||||||
## Version 0.1.1
|
## Version 0.1.1
|
||||||
|
|||||||
@@ -27,9 +27,10 @@ Examples of unacceptable behavior include:
|
|||||||
- The use of sexualized language or imagery, and sexual attention or advances of any kind
|
- The use of sexualized language or imagery, and sexual attention or advances of any kind
|
||||||
- Trolling, insulting or derogatory comments, and personal or political attacks
|
- Trolling, insulting or derogatory comments, and personal or political attacks
|
||||||
- Public or private harassment
|
- Public or private harassment
|
||||||
- Publishing others' private information, such as a physical or email address, without their
|
- Publishing others' private information, such as a physical or email address, without
|
||||||
explicit permission
|
their explicit permission
|
||||||
- Other conduct which could reasonably be considered inappropriate in a professional setting
|
- Other conduct which could reasonably be considered inappropriate in a professional
|
||||||
|
setting
|
||||||
|
|
||||||
## Enforcement Responsibilities
|
## Enforcement Responsibilities
|
||||||
|
|
||||||
@@ -52,8 +53,8 @@ offline event.
|
|||||||
## Enforcement
|
## Enforcement
|
||||||
|
|
||||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the
|
||||||
community leaders responsible for enforcement at \[INSERT CONTACT METHOD\]. All
|
community leaders responsible for enforcement at \[INSERT CONTACT METHOD\]. All complaints
|
||||||
complaints will be reviewed and investigated promptly and fairly.
|
will be reviewed and investigated promptly and fairly.
|
||||||
|
|
||||||
All community leaders are obligated to respect the privacy and security of the reporter of
|
All community leaders are obligated to respect the privacy and security of the reporter of
|
||||||
any incident.
|
any incident.
|
||||||
@@ -105,8 +106,8 @@ toward or disparagement of classes of individuals.
|
|||||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.0,
|
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.0,
|
||||||
available at https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
|
available at https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
|
||||||
|
|
||||||
Community Impact Guidelines were inspired by [Mozilla's code of conduct
|
Community Impact Guidelines were inspired by
|
||||||
enforcement ladder](https://github.com/mozilla/diversity).
|
[Mozilla's code of conduct enforcement ladder](https://github.com/mozilla/diversity).
|
||||||
|
|
||||||
For answers to common questions about this code of conduct, see the FAQ at
|
For answers to common questions about this code of conduct, see the FAQ at
|
||||||
https://www.contributor-covenant.org/faq. Translations are available at
|
https://www.contributor-covenant.org/faq. Translations are available at
|
||||||
|
|||||||
2
Makefile
2
Makefile
@@ -30,7 +30,7 @@ source: ## Build Python source distribution package
|
|||||||
poetry build --format sdist
|
poetry build --format sdist
|
||||||
|
|
||||||
test: ## Run the project testsuite(s)
|
test: ## Run the project testsuite(s)
|
||||||
poetry run tox --recreate
|
poetry run tox --recreate --parallel
|
||||||
|
|
||||||
dev: ## Create the local dev environment
|
dev: ## Create the local dev environment
|
||||||
poetry install --extras poetry --sync
|
poetry install --extras poetry --sync
|
||||||
|
|||||||
80
README.md
80
README.md
@@ -33,7 +33,8 @@ See the
|
|||||||
[Changelog](https://github.com/enpaul/tox-poetry-installer/blob/devel/CHANGELOG.md) for
|
[Changelog](https://github.com/enpaul/tox-poetry-installer/blob/devel/CHANGELOG.md) for
|
||||||
release history.
|
release history.
|
||||||
|
|
||||||
*See also: [official Tox plugins](https://tox.readthedocs.io/en/latest/plugins.html) and [the official Poetry documentation on using Tox](https://python-poetry.org/docs/faq/#is-tox-supported)*
|
*See also: [official Tox plugins](https://tox.readthedocs.io/en/latest/plugins.html) and
|
||||||
|
[the official Poetry documentation on using Tox](https://python-poetry.org/docs/faq/#is-tox-supported)*
|
||||||
|
|
||||||
## Feature Overview
|
## Feature Overview
|
||||||
|
|
||||||
@@ -52,7 +53,9 @@ release history.
|
|||||||
|
|
||||||
## User Documentation
|
## User Documentation
|
||||||
|
|
||||||
*This section is for users looking to integrate the plugin with their project or CI system. For information on contributing to the plugin please see the [Developer Docs](#developer-documentation)*
|
*This section is for users looking to integrate the plugin with their project or CI
|
||||||
|
system. For information on contributing to the plugin please see the
|
||||||
|
[Developer Docs](#developer-documentation)*
|
||||||
|
|
||||||
### Installing
|
### Installing
|
||||||
|
|
||||||
@@ -145,9 +148,9 @@ locked_deps =
|
|||||||
commands = ...
|
commands = ...
|
||||||
```
|
```
|
||||||
|
|
||||||
> ℹ️ **Note:** Settings configured on the main `testenv` environment are inherited by child
|
> ℹ️ **Note:** Settings configured on the main `testenv` environment are inherited by
|
||||||
> test environments (for example, `testenv:foo`). To override this, specify the setting in
|
> child test environments (for example, `testenv:foo`). To override this, specify the
|
||||||
> the child environment with a different value.
|
> setting in the child environment with a different value.
|
||||||
|
|
||||||
Alternatively, we can skip specifying all of our dependencies for a test environment in
|
Alternatively, we can skip specifying all of our dependencies for a test environment in
|
||||||
the Tox config and install Poetry dependency groups directly:
|
the Tox config and install Poetry dependency groups directly:
|
||||||
@@ -161,8 +164,8 @@ poetry_dep_groups =
|
|||||||
commands = ...
|
commands = ...
|
||||||
```
|
```
|
||||||
|
|
||||||
> ℹ️ **Note:** The `install_dev_deps` configuration option is deprecated. See [Configuration
|
> ℹ️ **Note:** The `install_dev_deps` configuration option is deprecated. See
|
||||||
> Options](#configuration-options) for more information.
|
> [Configuration Options](#configuration-options) for more information.
|
||||||
|
|
||||||
Finally, we can also install an unlocked dependency (a dependency which doesn't take its
|
Finally, we can also install an unlocked dependency (a dependency which doesn't take its
|
||||||
version from the Poetry lockfile) into the test environment alongside the locked ones. We
|
version from the Poetry lockfile) into the test environment alongside the locked ones. We
|
||||||
@@ -190,9 +193,9 @@ All options listed below are Tox environment options and can be applied to one o
|
|||||||
environment sections of the `tox.ini` file. They cannot be applied to the global Tox
|
environment sections of the `tox.ini` file. They cannot be applied to the global Tox
|
||||||
configuration section.
|
configuration section.
|
||||||
|
|
||||||
> ℹ️ **Note:** Settings configured on the main `testenv` environment are inherited by child
|
> ℹ️ **Note:** Settings configured on the main `testenv` environment are inherited by
|
||||||
> test environments (for example, `testenv:foo`). To override this, specify the setting in
|
> child test environments (for example, `testenv:foo`). To override this, specify the
|
||||||
> the child environment with a different value.
|
> setting in the child environment with a different value.
|
||||||
|
|
||||||
| Option | Type | Default | Description |
|
| Option | Type | Default | Description |
|
||||||
| :--------------------- | :-----: | :-----: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
| :--------------------- | :-----: | :-----: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
@@ -202,9 +205,9 @@ configuration section.
|
|||||||
| `require_poetry` | Boolean | False | Whether Tox should be forced to fail if the plugin cannot import Poetry locally. If `False` then the plugin will be skipped for the test environment if Poetry cannot be imported. If `True` then the plugin will force the environment to error and the Tox run to fail. |
|
| `require_poetry` | Boolean | False | Whether Tox should be forced to fail if the plugin cannot import Poetry locally. If `False` then the plugin will be skipped for the test environment if Poetry cannot be imported. If `True` then the plugin will force the environment to error and the Tox run to fail. |
|
||||||
| `poetry_dep_groups` | List | `[]` | Names of Poetry dependency groups specified in `pyproject.toml` to install to the test environment. |
|
| `poetry_dep_groups` | List | `[]` | Names of Poetry dependency groups specified in `pyproject.toml` to install to the test environment. |
|
||||||
|
|
||||||
> ℹ️ **Note:** The `install_dev_deps` configuration option is deprecated and will be removed
|
> ℹ️ **Note:** The `install_dev_deps` configuration option is deprecated and will be
|
||||||
> in version 1.0.0. Please set `poetry_dep_groups = [dev]` in `tox.ini` for environments
|
> removed in version 1.0.0. Please set `poetry_dep_groups = [dev]` in `tox.ini` for
|
||||||
> that install the development dependencies.
|
> environments that install the development dependencies.
|
||||||
|
|
||||||
### Runtime Options
|
### Runtime Options
|
||||||
|
|
||||||
@@ -238,8 +241,8 @@ error will be set to one of the "Status" values below to indicate what the error
|
|||||||
| `RequiresUnsafeDepError` | Indicates that the package-under-test depends on a package that Poetry has classified as unsafe and cannot be installed. |
|
| `RequiresUnsafeDepError` | Indicates that the package-under-test depends on a package that Poetry has classified as unsafe and cannot be installed. |
|
||||||
|
|
||||||
> ℹ️ **Note:** One or more of these errors can be caused by the `pyproject.toml` being out
|
> ℹ️ **Note:** One or more of these errors can be caused by the `pyproject.toml` being out
|
||||||
> of sync with the Poetry lockfile. If this is the case, than a warning will be logged when
|
> of sync with the Poetry lockfile. If this is the case, than a warning will be logged
|
||||||
> Tox is run.
|
> when Tox is run.
|
||||||
|
|
||||||
### Other Notes
|
### Other Notes
|
||||||
|
|
||||||
@@ -250,8 +253,8 @@ these options are made obsolete by the Poetry lockfile: either they aren't neede
|
|||||||
equivalent functionality is instead taken directly from the package details Poetry stores
|
equivalent functionality is instead taken directly from the package details Poetry stores
|
||||||
in its lockfile.
|
in its lockfile.
|
||||||
|
|
||||||
> ℹ️ **Note:** The unsupported Tox config options will still apply to unlocked dependencies
|
> ℹ️ **Note:** The unsupported Tox config options will still apply to unlocked
|
||||||
> being installed with the default Tox installation backend.
|
> dependencies being installed with the default Tox installation backend.
|
||||||
|
|
||||||
- [`install_command`](https://tox.readthedocs.io/en/latest/config.html#conf-install_command)
|
- [`install_command`](https://tox.readthedocs.io/en/latest/config.html#conf-install_command)
|
||||||
- [`pip_pre`](https://tox.readthedocs.io/en/latest/config.html#conf-pip_pre)
|
- [`pip_pre`](https://tox.readthedocs.io/en/latest/config.html#conf-pip_pre)
|
||||||
@@ -273,8 +276,8 @@ built-in
|
|||||||
option) for the new version to be found and installed.
|
option) for the new version to be found and installed.
|
||||||
|
|
||||||
> ℹ️ **Note:** To force Tox to always recreate a test environment the
|
> ℹ️ **Note:** To force Tox to always recreate a test environment the
|
||||||
> [`recreate`](https://tox.readthedocs.io/en/latest/config.html#conf-recreate) config option
|
> [`recreate`](https://tox.readthedocs.io/en/latest/config.html#conf-recreate) config
|
||||||
> can be set.
|
> option can be set.
|
||||||
|
|
||||||
#### Using with an unmanaged Poetry installation
|
#### Using with an unmanaged Poetry installation
|
||||||
|
|
||||||
@@ -288,8 +291,8 @@ cases, this plugin specifies the `poetry` package as an optional dependency that
|
|||||||
installed using a setuptools extra also named `poetry`.
|
installed using a setuptools extra also named `poetry`.
|
||||||
|
|
||||||
> ⚠️ **Warning:** This plugin requires Poetry to function. If the plugin is installed
|
> ⚠️ **Warning:** This plugin requires Poetry to function. If the plugin is installed
|
||||||
> without the `poetry` setuptools extra then Poetry must be installed independently for the
|
> without the `poetry` setuptools extra then Poetry must be installed independently for
|
||||||
> plugin to function properly.
|
> the plugin to function properly.
|
||||||
|
|
||||||
To skip installing the `poetry` package as a dependency of `tox-poetry-installer`, do not
|
To skip installing the `poetry` package as a dependency of `tox-poetry-installer`, do not
|
||||||
specify the `poetry` extra when adding the plugin:
|
specify the `poetry` extra when adding the plugin:
|
||||||
@@ -324,7 +327,8 @@ python -c '\
|
|||||||
## Developer Documentation
|
## Developer Documentation
|
||||||
|
|
||||||
All project contributors and participants are expected to adhere to the
|
All project contributors and participants are expected to adhere to the
|
||||||
[Contributor Covenant Code of Conduct, v2](CODE_OF_CONDUCT.md) ([external link](https://www.contributor-covenant.org/version/2/0/code_of_conduct/)).
|
[Contributor Covenant Code of Conduct, v2](CODE_OF_CONDUCT.md)
|
||||||
|
([external link](https://www.contributor-covenant.org/version/2/0/code_of_conduct/)).
|
||||||
|
|
||||||
The `devel` branch has the latest (and potentially unstable) changes. The stable releases
|
The `devel` branch has the latest (and potentially unstable) changes. The stable releases
|
||||||
are tracked on [Github](https://github.com/enpaul/tox-poetry-installer/releases),
|
are tracked on [Github](https://github.com/enpaul/tox-poetry-installer/releases),
|
||||||
@@ -377,35 +381,39 @@ production environments on a provisional basis only.
|
|||||||
|
|
||||||
- Beta classification was assigned with
|
- Beta classification was assigned with
|
||||||
[v0.6.0](https://github.com/enpaul/tox-poetry-installer/releases/tag/0.6.0)
|
[v0.6.0](https://github.com/enpaul/tox-poetry-installer/releases/tag/0.6.0)
|
||||||
- Stable classification will be assigned when the test suite covers an acceptable number of
|
- Stable classification will be assigned when the test suite covers an acceptable number
|
||||||
use cases
|
of use cases
|
||||||
|
|
||||||
### Path to Beta
|
### Path to Beta
|
||||||
|
|
||||||
- [x] Verify that primary package dependencies (from the `.package` env) are installed
|
- [x] Verify that primary package dependencies (from the `.package` env) are installed
|
||||||
correctly using the Poetry backend.
|
correctly using the Poetry backend.
|
||||||
- [x] Support the [`extras`](https://tox.readthedocs.io/en/latest/config.html#conf-extras) Tox
|
- [x] Support the [`extras`](https://tox.readthedocs.io/en/latest/config.html#conf-extras)
|
||||||
configuration option ([#4](https://github.com/enpaul/tox-poetry-installer/issues/4))
|
Tox configuration option ([#4](https://github.com/enpaul/tox-poetry-installer/issues/4))
|
||||||
- [x] Add per-environment Tox configuration option to fall back to default installation
|
- [x] Add per-environment Tox configuration option to fall back to default installation
|
||||||
backend.
|
backend.
|
||||||
- [ ] ~Add warnings when an unsupported Tox configuration option is detected while using the
|
- [ ] ~Add warnings when an unsupported Tox configuration option is detected while using
|
||||||
Poetry backend.~ ([#5](https://github.com/enpaul/tox-poetry-installer/issues/5))
|
the Poetry backend.~ ([#5](https://github.com/enpaul/tox-poetry-installer/issues/5))
|
||||||
- [x] Add trivial tests to ensure the project metadata is consistent between the pyproject.toml
|
- [x] Add trivial tests to ensure the project metadata is consistent between the
|
||||||
and the module constants.
|
pyproject.toml and the module constants.
|
||||||
- [x] Update to use [poetry-core](https://github.com/python-poetry/poetry-core) and improve
|
- [x] Update to use [poetry-core](https://github.com/python-poetry/poetry-core) and
|
||||||
robustness of the Tox and Poetry module imports to avoid potentially breaking API changes
|
improve robustness of the Tox and Poetry module imports to avoid potentially breaking
|
||||||
in upstream packages. ([#2](https://github.com/enpaul/tox-poetry-installer/issues/2))
|
API changes in upstream packages.
|
||||||
|
([#2](https://github.com/enpaul/tox-poetry-installer/issues/2))
|
||||||
- [ ] ~Find and implement a way to mitigate the
|
- [ ] ~Find and implement a way to mitigate the
|
||||||
[UNSAFE_DEPENDENCIES issue](https://github.com/python-poetry/poetry/issues/1584) in
|
[UNSAFE_DEPENDENCIES issue](https://github.com/python-poetry/poetry/issues/1584) in
|
||||||
Poetry.~ ([#6](https://github.com/enpaul/tox-poetry-installer/issues/6))
|
Poetry.~ ([#6](https://github.com/enpaul/tox-poetry-installer/issues/6))
|
||||||
- [x] Fix logging to make proper use of Tox's logging reporter infrastructure ([#3](https://github.com/enpaul/tox-poetry-installer/issues/3))
|
- [x] Fix logging to make proper use of Tox's logging reporter infrastructure
|
||||||
- [x] Add configuration option for installing all dev-dependencies to a testenv ([#14](https://github.com/enpaul/tox-poetry-installer/issues/14))
|
([#3](https://github.com/enpaul/tox-poetry-installer/issues/3))
|
||||||
|
- [x] Add configuration option for installing all dev-dependencies to a testenv
|
||||||
|
([#14](https://github.com/enpaul/tox-poetry-installer/issues/14))
|
||||||
|
|
||||||
### Path to Stable
|
### Path to Stable
|
||||||
|
|
||||||
Everything in Beta plus...
|
Everything in Beta plus...
|
||||||
|
|
||||||
- [ ] Fully replace dependency on `poetry` with dependency on `poetry-core` ([#2](https://github.com/enpaul/tox-poetry-installer/issues/2))
|
- [ ] Fully replace dependency on `poetry` with dependency on `poetry-core`
|
||||||
|
([#2](https://github.com/enpaul/tox-poetry-installer/issues/2))
|
||||||
- [x] Add comprehensive unit tests
|
- [x] Add comprehensive unit tests
|
||||||
- [ ] ~Add tests for each feature version of Tox between 3.8 and 3.20~
|
- [ ] ~Add tests for each feature version of Tox between 3.8 and 3.20~
|
||||||
- [x] Add tests for Python-3.6, 3.7, 3.8, and 3.9
|
- [x] Add tests for Python-3.6, 3.7, 3.8, and 3.9
|
||||||
|
|||||||
1330
poetry.lock
generated
1330
poetry.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
|||||||
[tool.poetry]
|
[tool.poetry]
|
||||||
name = "tox-poetry-installer"
|
name = "tox-poetry-installer"
|
||||||
version = "0.10.2"
|
version = "0.10.3"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
authors = ["Ethan Paul <24588726+enpaul@users.noreply.github.com>"]
|
authors = ["Ethan Paul <24588726+enpaul@users.noreply.github.com>"]
|
||||||
description = "A plugin for Tox that lets you install test environment dependencies from the Poetry lockfile"
|
description = "A plugin for Tox that lets you install test environment dependencies from the Poetry lockfile"
|
||||||
@@ -40,17 +40,17 @@ poetry = ["poetry", "cleo"]
|
|||||||
[tool.poetry.dependencies]
|
[tool.poetry.dependencies]
|
||||||
python = "^3.7"
|
python = "^3.7"
|
||||||
cleo = {version = ">=1.0,<3.0", optional = true}
|
cleo = {version = ">=1.0,<3.0", optional = true}
|
||||||
poetry = {version = "^1.2.0", optional = true}
|
poetry = {version = "^1.5.0", optional = true}
|
||||||
poetry-core = "^1.1.0"
|
poetry-core = "^1.1.0"
|
||||||
tox = "^3.8.0"
|
tox = "^4"
|
||||||
|
|
||||||
[tool.poetry.group.dev.dependencies]
|
[tool.poetry.group.dev.dependencies]
|
||||||
bandit = "^1.6.2"
|
bandit = "^1.6.2"
|
||||||
black = "^22.3.0"
|
black = "^22.3.0"
|
||||||
blacken-docs = "^1.8.0"
|
blacken-docs = "^1.8.0"
|
||||||
ipython = {version = "^8.10.1", python = "^3.8"}
|
ipython = {version = "^8.10.1", python = "^3.8"}
|
||||||
mdformat = "^0.6"
|
mdformat = "^0.7"
|
||||||
mdformat-gfm = "^0.2"
|
mdformat-gfm = "^0.3"
|
||||||
mypy = "^0.930"
|
mypy = "^0.930"
|
||||||
pre-commit = "^2.7.1"
|
pre-commit = "^2.7.1"
|
||||||
pre-commit-hooks = "^3.3.0"
|
pre-commit-hooks = "^3.3.0"
|
||||||
@@ -60,13 +60,8 @@ pytest-cov = "^2.10.1"
|
|||||||
reorder-python-imports = "^2.3.5"
|
reorder-python-imports = "^2.3.5"
|
||||||
safety = "^2.2.0"
|
safety = "^2.2.0"
|
||||||
toml = "^0.10.1"
|
toml = "^0.10.1"
|
||||||
tox = "^3.20.0"
|
tox = "^4"
|
||||||
types-toml = "^0.10.1"
|
types-toml = "^0.10.1"
|
||||||
# This is a workaround for this issue with the Poetry export
|
|
||||||
# plugin which was blocking the 'security' CI check:
|
|
||||||
#
|
|
||||||
# https://github.com/python-poetry/poetry-plugin-export/issues/176
|
|
||||||
virtualenv = ">=20.15,<20.16"
|
|
||||||
|
|
||||||
[build-system]
|
[build-system]
|
||||||
requires = ["poetry-core>=1.1.0"]
|
requires = ["poetry-core>=1.1.0"]
|
||||||
|
|||||||
@@ -1,13 +1,14 @@
|
|||||||
# pylint: disable=missing-module-docstring, missing-function-docstring, unused-argument, too-few-public-methods
|
# pylint: disable=missing-module-docstring, missing-function-docstring, unused-argument, too-few-public-methods
|
||||||
import time
|
import time
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
from typing import List
|
||||||
|
|
||||||
import poetry.factory
|
import poetry.factory
|
||||||
import poetry.installation.pip_installer
|
import poetry.installation.executor
|
||||||
import poetry.utils.env
|
import poetry.utils.env
|
||||||
import pytest
|
import pytest
|
||||||
import tox
|
import tox.tox_env.python.virtual_env.runner
|
||||||
from poetry.core.packages.package import Package as PoetryPackage
|
from poetry.installation.operations.operation import Operation
|
||||||
|
|
||||||
from tox_poetry_installer import utilities
|
from tox_poetry_installer import utilities
|
||||||
|
|
||||||
@@ -20,11 +21,8 @@ FAKE_VENV_PATH = Path("nowhere")
|
|||||||
class MockVirtualEnv:
|
class MockVirtualEnv:
|
||||||
"""Mock class for the :class:`poetry.utils.env.VirtualEnv` and :class:`tox.venv.VirtualEnv`"""
|
"""Mock class for the :class:`poetry.utils.env.VirtualEnv` and :class:`tox.venv.VirtualEnv`"""
|
||||||
|
|
||||||
class MockTestenvConfig: # pylint: disable=missing-class-docstring
|
|
||||||
envdir = FAKE_VENV_PATH
|
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
self.envconfig = self.MockTestenvConfig()
|
self.env_dir = FAKE_VENV_PATH
|
||||||
self.installed = []
|
self.installed = []
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@@ -36,24 +34,24 @@ class MockVirtualEnv:
|
|||||||
return (1, 2, 3)
|
return (1, 2, 3)
|
||||||
|
|
||||||
|
|
||||||
class MockPipInstaller:
|
class MockExecutor:
|
||||||
"""Mock class for the :class:`poetry.installation.pip_installer.PipInstaller`"""
|
"""Mock class for the :class:`poetry.installation.executor.Executor`"""
|
||||||
|
|
||||||
def __init__(self, env: MockVirtualEnv, **kwargs):
|
def __init__(self, env: MockVirtualEnv, **kwargs):
|
||||||
self.env = env
|
self.env = env
|
||||||
|
|
||||||
def install(self, package: PoetryPackage):
|
def execute(self, operations: List[Operation]):
|
||||||
self.env.installed.append(package)
|
self.env.installed.extend([operation.package for operation in operations])
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def mock_venv(monkeypatch):
|
def mock_venv(monkeypatch):
|
||||||
monkeypatch.setattr(utilities, "convert_virtualenv", lambda venv: venv)
|
monkeypatch.setattr(utilities, "convert_virtualenv", lambda venv: venv)
|
||||||
|
monkeypatch.setattr(poetry.installation.executor, "Executor", MockExecutor)
|
||||||
monkeypatch.setattr(
|
monkeypatch.setattr(
|
||||||
poetry.installation.pip_installer, "PipInstaller", MockPipInstaller
|
tox.tox_env.python.virtual_env.runner, "VirtualEnvRunner", MockVirtualEnv
|
||||||
)
|
)
|
||||||
monkeypatch.setattr(tox.venv, "VirtualEnv", MockVirtualEnv)
|
|
||||||
monkeypatch.setattr(poetry.utils.env, "VirtualEnv", MockVirtualEnv)
|
monkeypatch.setattr(poetry.utils.env, "VirtualEnv", MockVirtualEnv)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import time
|
|||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
import tox.venv
|
import tox.tox_env.python.virtual_env.runner
|
||||||
from poetry.factory import Factory
|
from poetry.factory import Factory
|
||||||
|
|
||||||
from .fixtures import mock_poetry_factory
|
from .fixtures import mock_poetry_factory
|
||||||
@@ -19,7 +19,7 @@ def test_deduplication(mock_venv, mock_poetry_factory):
|
|||||||
item.name: item for item in poetry.locker.locked_repository().packages
|
item.name: item for item in poetry.locker.locked_repository().packages
|
||||||
}
|
}
|
||||||
|
|
||||||
venv = tox.venv.VirtualEnv()
|
venv = tox.tox_env.python.virtual_env.runner.VirtualEnvRunner()
|
||||||
to_install = [packages["toml"], packages["toml"]]
|
to_install = [packages["toml"], packages["toml"]]
|
||||||
|
|
||||||
installer.install(poetry, venv, to_install)
|
installer.install(poetry, venv, to_install)
|
||||||
@@ -43,12 +43,12 @@ def test_parallelization(mock_venv, mock_poetry_factory):
|
|||||||
packages["attrs"],
|
packages["attrs"],
|
||||||
]
|
]
|
||||||
|
|
||||||
venv_sequential = tox.venv.VirtualEnv()
|
venv_sequential = tox.tox_env.python.virtual_env.runner.VirtualEnvRunner()
|
||||||
start_sequential = time.time()
|
start_sequential = time.time()
|
||||||
installer.install(poetry, venv_sequential, to_install, 0)
|
installer.install(poetry, venv_sequential, to_install, 0)
|
||||||
sequential = time.time() - start_sequential
|
sequential = time.time() - start_sequential
|
||||||
|
|
||||||
venv_parallel = tox.venv.VirtualEnv()
|
venv_parallel = tox.tox_env.python.virtual_env.runner.VirtualEnvRunner()
|
||||||
start_parallel = time.time()
|
start_parallel = time.time()
|
||||||
installer.install(poetry, venv_parallel, to_install, 5)
|
installer.install(poetry, venv_parallel, to_install, 5)
|
||||||
parallel = time.time() - start_parallel
|
parallel = time.time() - start_parallel
|
||||||
@@ -76,13 +76,13 @@ def test_propagates_exceptions_during_installation(
|
|||||||
item.name: item for item in poetry.locker.locked_repository().packages
|
item.name: item for item in poetry.locker.locked_repository().packages
|
||||||
}
|
}
|
||||||
to_install = [packages["toml"]]
|
to_install = [packages["toml"]]
|
||||||
venv = tox.venv.VirtualEnv()
|
venv = tox.tox_env.python.virtual_env.runner.VirtualEnvRunner()
|
||||||
fake_exception = ValueError("my testing exception")
|
fake_exception = ValueError("my testing exception")
|
||||||
|
|
||||||
with mock.patch.object(
|
with mock.patch.object(
|
||||||
_poetry,
|
_poetry,
|
||||||
"PipInstaller",
|
"Executor",
|
||||||
**{"return_value.install.side_effect": fake_exception},
|
**{"return_value.execute.side_effect": fake_exception},
|
||||||
):
|
):
|
||||||
with pytest.raises(ValueError) as exc_info:
|
with pytest.raises(ValueError) as exc_info:
|
||||||
installer.install(poetry, venv, to_install, num_threads)
|
installer.install(poetry, venv, to_install, num_threads)
|
||||||
|
|||||||
7
tox.ini
7
tox.ini
@@ -1,6 +1,5 @@
|
|||||||
[tox]
|
[tox]
|
||||||
envlist = py37, py38, py39, py310, py311, static, static-tests, security
|
envlist = py37, py38, py39, py310, py311, static, static-tests, security
|
||||||
isolated_build = true
|
|
||||||
skip_missing_interpreters = true
|
skip_missing_interpreters = true
|
||||||
|
|
||||||
[testenv]
|
[testenv]
|
||||||
@@ -21,7 +20,7 @@ commands =
|
|||||||
|
|
||||||
[testenv:static]
|
[testenv:static]
|
||||||
description = Static formatting and quality enforcement
|
description = Static formatting and quality enforcement
|
||||||
basepython = python3.10
|
basepython = py310
|
||||||
platform = linux
|
platform = linux
|
||||||
ignore_errors = true
|
ignore_errors = true
|
||||||
locked_deps =
|
locked_deps =
|
||||||
@@ -46,7 +45,7 @@ commands =
|
|||||||
|
|
||||||
[testenv:static-tests]
|
[testenv:static-tests]
|
||||||
description = Static formatting and quality enforcement for the tests
|
description = Static formatting and quality enforcement for the tests
|
||||||
basepython = python3.10
|
basepython = py310
|
||||||
platform = linux
|
platform = linux
|
||||||
ignore_errors = true
|
ignore_errors = true
|
||||||
locked_deps =
|
locked_deps =
|
||||||
@@ -63,7 +62,7 @@ commands =
|
|||||||
|
|
||||||
[testenv:security]
|
[testenv:security]
|
||||||
description = Security checks
|
description = Security checks
|
||||||
basepython = python3.10
|
basepython = py310
|
||||||
platform = linux
|
platform = linux
|
||||||
ignore_errors = true
|
ignore_errors = true
|
||||||
skip_install = true
|
skip_install = true
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# pylint: disable=missing-docstring
|
# pylint: disable=missing-docstring
|
||||||
__title__ = "tox-poetry-installer"
|
__title__ = "tox-poetry-installer"
|
||||||
__summary__ = "A plugin for Tox that lets you install test environment dependencies from the Poetry lockfile"
|
__summary__ = "A plugin for Tox that lets you install test environment dependencies from the Poetry lockfile"
|
||||||
__version__ = "0.10.2"
|
__version__ = "0.10.3"
|
||||||
__url__ = "https://github.com/enpaul/tox-poetry-installer/"
|
__url__ = "https://github.com/enpaul/tox-poetry-installer/"
|
||||||
__license__ = "MIT"
|
__license__ = "MIT"
|
||||||
__authors__ = ["Ethan Paul <24588726+enpaul@users.noreply.github.com>"]
|
__authors__ = ["Ethan Paul <24588726+enpaul@users.noreply.github.com>"]
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
# pylint: disable=missing-docstring
|
# pylint: disable=missing-docstring
|
||||||
from tox_poetry_installer.hooks import tox_addoption
|
from tox_poetry_installer.hooks import tox_add_env_config
|
||||||
from tox_poetry_installer.hooks import tox_testenv_install_deps
|
from tox_poetry_installer.hooks import tox_add_option
|
||||||
|
from tox_poetry_installer.hooks import tox_on_install
|
||||||
|
|||||||
@@ -29,8 +29,12 @@ from tox_poetry_installer import exceptions
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
from cleo.io.null_io import NullIO
|
from cleo.io.null_io import NullIO
|
||||||
|
from poetry.config.config import Config
|
||||||
|
from poetry.core.packages.dependency import Dependency as PoetryDependency
|
||||||
|
from poetry.core.packages.package import Package as PoetryPackage
|
||||||
from poetry.factory import Factory
|
from poetry.factory import Factory
|
||||||
from poetry.installation.pip_installer import PipInstaller
|
from poetry.installation.executor import Executor
|
||||||
|
from poetry.installation.operations.install import Install
|
||||||
from poetry.poetry import Poetry
|
from poetry.poetry import Poetry
|
||||||
from poetry.utils.env import VirtualEnv
|
from poetry.utils.env import VirtualEnv
|
||||||
except ImportError:
|
except ImportError:
|
||||||
|
|||||||
@@ -5,14 +5,13 @@ specifically related to implementing the hooks (to keep the size/readability of
|
|||||||
themselves manageable).
|
themselves manageable).
|
||||||
"""
|
"""
|
||||||
from itertools import chain
|
from itertools import chain
|
||||||
from typing import Optional
|
from typing import List
|
||||||
|
|
||||||
import tox
|
from tox.config.cli.parser import ToxParser
|
||||||
from tox.action import Action as ToxAction
|
from tox.config.sets import EnvConfigSet
|
||||||
from tox.config import Parser as ToxParser
|
from tox.plugin import impl
|
||||||
from tox.venv import VirtualEnv as ToxVirtualEnv
|
from tox.tox_env.api import ToxEnv as ToxVirtualEnv
|
||||||
|
|
||||||
from tox_poetry_installer import __about__
|
|
||||||
from tox_poetry_installer import constants
|
from tox_poetry_installer import constants
|
||||||
from tox_poetry_installer import exceptions
|
from tox_poetry_installer import exceptions
|
||||||
from tox_poetry_installer import installer
|
from tox_poetry_installer import installer
|
||||||
@@ -20,74 +19,9 @@ from tox_poetry_installer import logger
|
|||||||
from tox_poetry_installer import utilities
|
from tox_poetry_installer import utilities
|
||||||
|
|
||||||
|
|
||||||
def _postprocess_install_project_deps(
|
@impl
|
||||||
testenv_config, value: Optional[str] # pylint: disable=unused-argument
|
def tox_add_option(parser: ToxParser):
|
||||||
) -> Optional[bool]:
|
"""Add additional command line arguments to tox to configure plugin behavior"""
|
||||||
"""An awful hack to patch on three-state boolean logic to a config parameter
|
|
||||||
|
|
||||||
.. warning: This logic should 100% be removed in the next feature release. It's here to work
|
|
||||||
around a bad design for now but should not persist.
|
|
||||||
|
|
||||||
The bug filed in `#61`_ is caused by a combination of poor design and attempted cleverness. The
|
|
||||||
name of the ``install_project_deps`` config option implies that it has ultimate control over
|
|
||||||
whether the project dependencies are installed to the testenv, but this is not actually correct.
|
|
||||||
What it actually allows the user to do is force the project dependencies to not be installed to
|
|
||||||
an environment that would otherwise install them. This was intended behavior, however the
|
|
||||||
intention was wrong.
|
|
||||||
|
|
||||||
.. _`#61`: https://github.com/enpaul/tox-poetry-installer/issues/61
|
|
||||||
|
|
||||||
In an effort to be clever the plugin automatically skips installing project dependencies when
|
|
||||||
the project package is not installed to the testenv (``skip_install = true``) or if packaging
|
|
||||||
as a whole is disabled (``skipsdist = true``). The intention of this behavior is to install only
|
|
||||||
the expected dependencies to a testenv and no more. However, this conflicts with the
|
|
||||||
``install_project_deps`` config option, which cannot override this behavior because it defaults
|
|
||||||
to ``True``. In effect, ``install_project_deps = true`` in fact means "automatically
|
|
||||||
determine whether to install project dependencies" and ``install_project_deps = false`` means
|
|
||||||
"never install the project dependencies". This is not ideal and unintuitive.
|
|
||||||
|
|
||||||
To avoid having to make a breaking change this workaround has been added to support three-state
|
|
||||||
logic between ``True``, ``False``, and ``None``. The ``install_project_deps`` option is now
|
|
||||||
parsed by Tox as a string with a default value of ``None``. If the value is not ``None`` then
|
|
||||||
this post processing function will try to convert it to a boolean the same way that Tox's
|
|
||||||
`SectionReader.getbool()`_ method does, raising an error to mimic the default behavior if it
|
|
||||||
can't.
|
|
||||||
|
|
||||||
.. _`SectionReader.getbool()`: https://github.com/tox-dev/tox/blob/f8459218ee5ab5753321b3eb989b7beee5b391ad/src/tox/config/__init__.py#L1724
|
|
||||||
|
|
||||||
The three states for the ``install_project_deps`` setting are:
|
|
||||||
* ``None`` - User did not configure the setting, package dependency installation is
|
|
||||||
determined automatically
|
|
||||||
* ``True`` - User configured the setting to ``True``, package dependencies will be installed
|
|
||||||
* ``False`` - User configured the setting to ``False``, package dependencies will not be
|
|
||||||
installed
|
|
||||||
|
|
||||||
This config option should be deprecated with the 1.0.0 release and instead an option like
|
|
||||||
``always_install_project_deps`` should be added which overrides the default determination and
|
|
||||||
just installs the project dependencies. The counterpart (``never_install_project_deps``)
|
|
||||||
shouldn't be needed, since I don't think there's a real use case for that.
|
|
||||||
"""
|
|
||||||
if value is None:
|
|
||||||
return value
|
|
||||||
|
|
||||||
if value.lower() == "true":
|
|
||||||
return True
|
|
||||||
if value.lower() == "false":
|
|
||||||
return False
|
|
||||||
|
|
||||||
raise tox.exception.ConfigError(
|
|
||||||
f"install_project_deps: boolean value '{value}' needs to be 'True' or 'False'"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@tox.hookimpl
|
|
||||||
def tox_addoption(parser: ToxParser):
|
|
||||||
"""Add required configuration options to the tox INI file
|
|
||||||
|
|
||||||
Adds the ``require_locked_deps`` configuration option to the venv to check whether all
|
|
||||||
dependencies should be treated as locked or not.
|
|
||||||
"""
|
|
||||||
|
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--require-poetry",
|
"--require-poetry",
|
||||||
action="store_true",
|
action="store_true",
|
||||||
@@ -95,14 +29,6 @@ def tox_addoption(parser: ToxParser):
|
|||||||
help="(deprecated) Trigger a failure if Poetry is not available to Tox",
|
help="(deprecated) Trigger a failure if Poetry is not available to Tox",
|
||||||
)
|
)
|
||||||
|
|
||||||
parser.add_argument(
|
|
||||||
"--parallelize-locked-install",
|
|
||||||
type=int,
|
|
||||||
dest="parallelize_locked_install",
|
|
||||||
default=None,
|
|
||||||
help="(deprecated) Number of worker threads to use for installing dependencies from the Poetry lockfile in parallel",
|
|
||||||
)
|
|
||||||
|
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--parallel-install-threads",
|
"--parallel-install-threads",
|
||||||
type=int,
|
type=int,
|
||||||
@@ -111,51 +37,50 @@ def tox_addoption(parser: ToxParser):
|
|||||||
help="Number of locked dependencies to install simultaneously; set to 0 to disable parallel installation",
|
help="Number of locked dependencies to install simultaneously; set to 0 to disable parallel installation",
|
||||||
)
|
)
|
||||||
|
|
||||||
parser.add_testenv_attribute(
|
|
||||||
name="install_dev_deps",
|
|
||||||
type="bool",
|
|
||||||
default=False,
|
|
||||||
help="(deprecated) Automatically install all Poetry development dependencies to the environment",
|
|
||||||
)
|
|
||||||
|
|
||||||
parser.add_testenv_attribute(
|
@impl
|
||||||
name="poetry_dep_groups",
|
def tox_add_env_config(env_conf: EnvConfigSet):
|
||||||
type="line-list",
|
"""Add required env configuration options to the tox INI file"""
|
||||||
|
env_conf.add_config(
|
||||||
|
"poetry_dep_groups",
|
||||||
|
of_type=List[str],
|
||||||
default=[],
|
default=[],
|
||||||
help="List of Poetry dependency groups to install to the environment",
|
desc="List of Poetry dependency groups to install to the environment",
|
||||||
)
|
)
|
||||||
|
|
||||||
parser.add_testenv_attribute(
|
env_conf.add_config(
|
||||||
name="install_project_deps",
|
"install_project_deps",
|
||||||
type="string",
|
of_type=bool,
|
||||||
default=None,
|
default=True,
|
||||||
help="Automatically install all Poetry primary dependencies to the environment",
|
desc="Automatically install all Poetry primary dependencies to the environment",
|
||||||
postprocess=_postprocess_install_project_deps,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
parser.add_testenv_attribute(
|
env_conf.add_config(
|
||||||
name="require_locked_deps",
|
"require_locked_deps",
|
||||||
type="bool",
|
of_type=bool,
|
||||||
default=False,
|
default=False,
|
||||||
help="Require all dependencies in the environment be installed using the Poetry lockfile",
|
desc="Require all dependencies in the environment be installed using the Poetry lockfile",
|
||||||
)
|
)
|
||||||
|
|
||||||
parser.add_testenv_attribute(
|
env_conf.add_config(
|
||||||
name="require_poetry",
|
"require_poetry",
|
||||||
type="bool",
|
of_type=bool,
|
||||||
default=False,
|
default=False,
|
||||||
help="Trigger a failure if Poetry is not available to Tox",
|
desc="Trigger a failure if Poetry is not available to Tox",
|
||||||
)
|
)
|
||||||
|
|
||||||
parser.add_testenv_attribute(
|
env_conf.add_config(
|
||||||
name="locked_deps",
|
"locked_deps",
|
||||||
type="line-list",
|
of_type=List[str],
|
||||||
help="List of locked dependencies to install to the environment using the Poetry lockfile",
|
default=[],
|
||||||
|
desc="List of locked dependencies to install to the environment using the Poetry lockfile",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@tox.hookimpl
|
@impl
|
||||||
def tox_testenv_install_deps(venv: ToxVirtualEnv, action: ToxAction) -> Optional[bool]:
|
def tox_on_install(
|
||||||
|
tox_env: ToxVirtualEnv, section: str # pylint: disable=unused-argument
|
||||||
|
) -> None:
|
||||||
"""Install the dependencies for the current environment
|
"""Install the dependencies for the current environment
|
||||||
|
|
||||||
Loads the local Poetry environment and the corresponding lockfile then pulls the dependencies
|
Loads the local Poetry environment and the corresponding lockfile then pulls the dependencies
|
||||||
@@ -165,22 +90,21 @@ def tox_testenv_install_deps(venv: ToxVirtualEnv, action: ToxAction) -> Optional
|
|||||||
:param venv: Tox virtual environment object with configuration for the local Tox environment.
|
:param venv: Tox virtual environment object with configuration for the local Tox environment.
|
||||||
:param action: Tox action object
|
:param action: Tox action object
|
||||||
"""
|
"""
|
||||||
|
|
||||||
try:
|
try:
|
||||||
poetry = utilities.check_preconditions(venv, action)
|
poetry = utilities.check_preconditions(tox_env)
|
||||||
except exceptions.SkipEnvironment as err:
|
except exceptions.SkipEnvironment as err:
|
||||||
if isinstance(err, exceptions.PoetryNotInstalledError) and (
|
if (
|
||||||
venv.envconfig.config.option.require_poetry or venv.envconfig.require_poetry
|
isinstance(err, exceptions.PoetryNotInstalledError)
|
||||||
|
and tox_env.conf["require_poetry"]
|
||||||
):
|
):
|
||||||
venv.status = err.__class__.__name__
|
|
||||||
logger.error(str(err))
|
logger.error(str(err))
|
||||||
return False
|
raise err
|
||||||
logger.info(str(err))
|
logger.info(str(err))
|
||||||
return None
|
return
|
||||||
|
|
||||||
logger.info(f"Loaded project pyproject.toml from {poetry.file}")
|
logger.info(f"Loaded project pyproject.toml from {poetry.file}")
|
||||||
|
|
||||||
virtualenv = utilities.convert_virtualenv(venv)
|
virtualenv = utilities.convert_virtualenv(tox_env)
|
||||||
|
|
||||||
if not poetry.locker.is_fresh():
|
if not poetry.locker.is_fresh():
|
||||||
logger.warning(
|
logger.warning(
|
||||||
@@ -188,28 +112,19 @@ def tox_testenv_install_deps(venv: ToxVirtualEnv, action: ToxAction) -> Optional
|
|||||||
)
|
)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if venv.envconfig.require_locked_deps and venv.envconfig.deps:
|
if tox_env.conf["require_locked_deps"] and tox_env.conf["deps"].lines():
|
||||||
raise exceptions.LockedDepsRequiredError(
|
raise exceptions.LockedDepsRequiredError(
|
||||||
f"Unlocked dependencies '{venv.envconfig.deps}' specified for environment '{venv.name}' which requires locked dependencies"
|
f"Unlocked dependencies '{tox_env.conf['deps']}' specified for environment '{tox_env.name}' which requires locked dependencies"
|
||||||
)
|
)
|
||||||
|
|
||||||
packages = utilities.build_package_map(poetry)
|
packages = utilities.build_package_map(poetry)
|
||||||
|
|
||||||
if venv.envconfig.install_dev_deps:
|
|
||||||
dev_deps = utilities.find_dev_deps(packages, virtualenv, poetry)
|
|
||||||
logger.info(
|
|
||||||
f"Identified {len(dev_deps)} development dependencies to install to env"
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
dev_deps = []
|
|
||||||
logger.info("Env does not install development dependencies, skipping")
|
|
||||||
|
|
||||||
group_deps = utilities.dedupe_packages(
|
group_deps = utilities.dedupe_packages(
|
||||||
list(
|
list(
|
||||||
chain(
|
chain(
|
||||||
*[
|
*[
|
||||||
utilities.find_group_deps(group, packages, virtualenv, poetry)
|
utilities.find_group_deps(group, packages, virtualenv, poetry)
|
||||||
for group in venv.envconfig.poetry_dep_groups
|
for group in tox_env.conf["poetry_dep_groups"]
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -219,24 +134,22 @@ def tox_testenv_install_deps(venv: ToxVirtualEnv, action: ToxAction) -> Optional
|
|||||||
)
|
)
|
||||||
|
|
||||||
env_deps = utilities.find_additional_deps(
|
env_deps = utilities.find_additional_deps(
|
||||||
packages, virtualenv, poetry, venv.envconfig.locked_deps
|
packages, virtualenv, poetry, tox_env.conf["locked_deps"]
|
||||||
)
|
)
|
||||||
|
|
||||||
logger.info(
|
logger.info(
|
||||||
f"Identified {len(env_deps)} environment dependencies to install to env"
|
f"Identified {len(env_deps)} environment dependencies to install to env"
|
||||||
)
|
)
|
||||||
|
|
||||||
install_project_deps = (
|
# extras are not set in a testenv if skip_install=true
|
||||||
venv.envconfig.install_project_deps
|
try:
|
||||||
if venv.envconfig.install_project_deps is not None
|
extras = tox_env.conf["extras"]
|
||||||
else (
|
except KeyError:
|
||||||
not venv.envconfig.skip_install and not venv.envconfig.config.skipsdist
|
extras = []
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
if install_project_deps:
|
if tox_env.conf["install_project_deps"]:
|
||||||
project_deps = utilities.find_project_deps(
|
project_deps = utilities.find_project_deps(
|
||||||
packages, virtualenv, poetry, venv.envconfig.extras
|
packages, virtualenv, poetry, extras
|
||||||
)
|
)
|
||||||
logger.info(
|
logger.info(
|
||||||
f"Identified {len(project_deps)} project dependencies to install to env"
|
f"Identified {len(project_deps)} project dependencies to install to env"
|
||||||
@@ -245,39 +158,18 @@ def tox_testenv_install_deps(venv: ToxVirtualEnv, action: ToxAction) -> Optional
|
|||||||
project_deps = []
|
project_deps = []
|
||||||
logger.info("Env does not install project package dependencies, skipping")
|
logger.info("Env does not install project package dependencies, skipping")
|
||||||
except exceptions.ToxPoetryInstallerException as err:
|
except exceptions.ToxPoetryInstallerException as err:
|
||||||
venv.status = err.__class__.__name__
|
|
||||||
logger.error(str(err))
|
logger.error(str(err))
|
||||||
return False
|
raise err
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
venv.status = "InternalError"
|
|
||||||
logger.error(f"Internal plugin error: {err}")
|
logger.error(f"Internal plugin error: {err}")
|
||||||
raise err
|
raise err
|
||||||
|
|
||||||
dependencies = utilities.dedupe_packages(
|
dependencies = utilities.dedupe_packages(group_deps + env_deps + project_deps)
|
||||||
dev_deps + group_deps + env_deps + project_deps
|
|
||||||
)
|
|
||||||
if (
|
|
||||||
venv.envconfig.config.option.parallel_install_threads
|
|
||||||
!= constants.DEFAULT_INSTALL_THREADS
|
|
||||||
):
|
|
||||||
parallel_threads = venv.envconfig.config.option.parallel_install_threads
|
|
||||||
else:
|
|
||||||
parallel_threads = (
|
|
||||||
venv.envconfig.config.option.parallelize_locked_install
|
|
||||||
if venv.envconfig.config.option.parallelize_locked_install is not None
|
|
||||||
else constants.DEFAULT_INSTALL_THREADS
|
|
||||||
)
|
|
||||||
log_parallel = f" (using {parallel_threads} threads)" if parallel_threads else ""
|
|
||||||
|
|
||||||
action.setactivity(
|
logger.info(f"Installing {len(dependencies)} dependencies from Poetry lock file")
|
||||||
__about__.__title__,
|
|
||||||
f"Installing {len(dependencies)} dependencies from Poetry lock file{log_parallel}",
|
|
||||||
)
|
|
||||||
installer.install(
|
installer.install(
|
||||||
poetry,
|
poetry,
|
||||||
venv,
|
tox_env,
|
||||||
dependencies,
|
dependencies,
|
||||||
parallel_threads,
|
tox_env.options.parallel_install_threads,
|
||||||
)
|
)
|
||||||
|
|
||||||
return venv.envconfig.require_locked_deps or None
|
|
||||||
|
|||||||
@@ -9,8 +9,7 @@ from datetime import datetime
|
|||||||
from typing import Collection
|
from typing import Collection
|
||||||
from typing import Set
|
from typing import Set
|
||||||
|
|
||||||
from poetry.core.packages.package import Package as PoetryPackage
|
from tox.tox_env.api import ToxEnv as ToxVirtualEnv
|
||||||
from tox.venv import VirtualEnv as ToxVirtualEnv
|
|
||||||
|
|
||||||
from tox_poetry_installer import logger
|
from tox_poetry_installer import logger
|
||||||
from tox_poetry_installer import utilities
|
from tox_poetry_installer import utilities
|
||||||
@@ -22,7 +21,7 @@ if typing.TYPE_CHECKING:
|
|||||||
def install(
|
def install(
|
||||||
poetry: "_poetry.Poetry",
|
poetry: "_poetry.Poetry",
|
||||||
venv: ToxVirtualEnv,
|
venv: ToxVirtualEnv,
|
||||||
packages: Collection[PoetryPackage],
|
packages: Collection["_poetry.PoetryPackage"],
|
||||||
parallels: int = 0,
|
parallels: int = 0,
|
||||||
):
|
):
|
||||||
"""Install a bunch of packages to a virtualenv
|
"""Install a bunch of packages to a virtualenv
|
||||||
@@ -35,22 +34,21 @@ def install(
|
|||||||
"""
|
"""
|
||||||
from tox_poetry_installer import _poetry
|
from tox_poetry_installer import _poetry
|
||||||
|
|
||||||
logger.info(
|
logger.info(f"Installing {len(packages)} packages to environment at {venv.env_dir}")
|
||||||
f"Installing {len(packages)} packages to environment at {venv.envconfig.envdir}"
|
|
||||||
)
|
|
||||||
|
|
||||||
pip = _poetry.PipInstaller(
|
install_executor = _poetry.Executor(
|
||||||
env=utilities.convert_virtualenv(venv),
|
env=utilities.convert_virtualenv(venv),
|
||||||
io=_poetry.NullIO(),
|
io=_poetry.NullIO(),
|
||||||
pool=poetry.pool,
|
pool=poetry.pool,
|
||||||
|
config=_poetry.Config(),
|
||||||
)
|
)
|
||||||
|
|
||||||
installed: Set[PoetryPackage] = set()
|
installed: Set[_poetry.PoetryPackage] = set()
|
||||||
|
|
||||||
def logged_install(dependency: PoetryPackage) -> None:
|
def logged_install(dependency: _poetry.PoetryPackage) -> None:
|
||||||
start = datetime.now()
|
start = datetime.now()
|
||||||
logger.debug(f"Installing {dependency}")
|
logger.debug(f"Installing {dependency}")
|
||||||
pip.install(dependency)
|
install_executor.execute([_poetry.Install(package=dependency)])
|
||||||
end = datetime.now()
|
end = datetime.now()
|
||||||
logger.debug(f"Finished installing {dependency} in {end - start}")
|
logger.debug(f"Finished installing {dependency} in {end - start}")
|
||||||
|
|
||||||
|
|||||||
@@ -4,26 +4,26 @@ Calling ``tox.reporter.something()`` and having to format a string with the pref
|
|||||||
gets really old fast, but more importantly it also makes the flow of the main code
|
gets really old fast, but more importantly it also makes the flow of the main code
|
||||||
more difficult to follow because of the added complexity.
|
more difficult to follow because of the added complexity.
|
||||||
"""
|
"""
|
||||||
import tox
|
import logging
|
||||||
|
|
||||||
from tox_poetry_installer import constants
|
from tox_poetry_installer import constants
|
||||||
|
|
||||||
|
|
||||||
def error(message: str):
|
def error(message: str):
|
||||||
"""Wrapper around :func:`tox.reporter.error`"""
|
"""Wrapper around :func:`logging.error` that prefixes the reporter prefix onto the message"""
|
||||||
tox.reporter.error(f"{constants.REPORTER_PREFIX} {message}")
|
logging.error(f"{constants.REPORTER_PREFIX} {message}")
|
||||||
|
|
||||||
|
|
||||||
def warning(message: str):
|
def warning(message: str):
|
||||||
"""Wrapper around :func:`tox.reporter.warning`"""
|
"""Wrapper around :func:`logging.warning`"""
|
||||||
tox.reporter.warning(f"{constants.REPORTER_PREFIX} {message}")
|
logging.warning(f"{constants.REPORTER_PREFIX} {message}")
|
||||||
|
|
||||||
|
|
||||||
def info(message: str):
|
def info(message: str):
|
||||||
"""Wrapper around :func:`tox.reporter.verbosity1`"""
|
"""Wrapper around :func:`logging.info`"""
|
||||||
tox.reporter.verbosity1(f"{constants.REPORTER_PREFIX} {message}")
|
logging.info(f"{constants.REPORTER_PREFIX} {message}")
|
||||||
|
|
||||||
|
|
||||||
def debug(message: str):
|
def debug(message: str):
|
||||||
"""Wrapper around :func:`tox.reporter.verbosity2`"""
|
"""Wrapper around :func:`logging.debug`"""
|
||||||
tox.reporter.verbosity2(f"{constants.REPORTER_PREFIX} {message}")
|
logging.debug(f"{constants.REPORTER_PREFIX} {message}")
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ from typing import Set
|
|||||||
|
|
||||||
from poetry.core.packages.dependency import Dependency as PoetryDependency
|
from poetry.core.packages.dependency import Dependency as PoetryDependency
|
||||||
from poetry.core.packages.package import Package as PoetryPackage
|
from poetry.core.packages.package import Package as PoetryPackage
|
||||||
from tox.action import Action as ToxAction
|
from tox.tox_env.api import ToxEnv as ToxVirtualEnv
|
||||||
from tox.venv import VirtualEnv as ToxVirtualEnv
|
from tox.tox_env.package import PackageToxEnv
|
||||||
|
|
||||||
from tox_poetry_installer import constants
|
from tox_poetry_installer import constants
|
||||||
from tox_poetry_installer import exceptions
|
from tox_poetry_installer import exceptions
|
||||||
@@ -26,50 +26,28 @@ if typing.TYPE_CHECKING:
|
|||||||
PackageMap = Dict[str, List[PoetryPackage]]
|
PackageMap = Dict[str, List[PoetryPackage]]
|
||||||
|
|
||||||
|
|
||||||
def check_preconditions(venv: ToxVirtualEnv, action: ToxAction) -> "_poetry.Poetry":
|
def check_preconditions(venv: ToxVirtualEnv) -> "_poetry.Poetry":
|
||||||
"""Check that the local project environment meets expectations"""
|
"""Check that the local project environment meets expectations"""
|
||||||
|
|
||||||
# Skip running the plugin for the provisioning environment. The provisioned environment,
|
# Skip running the plugin for the provisioning environment. The provisioned environment,
|
||||||
# for alternative Tox versions and/or the ``requires`` meta dependencies is specially
|
# for alternative Tox versions and/or the ``requires`` meta dependencies is specially
|
||||||
# handled by Tox and is out of scope for this plugin. Since one of the ways to install this
|
# handled by Tox and is out of scope for this plugin. Since one of the ways to install this
|
||||||
# plugin in the first place is via the Tox provisioning environment, it quickly becomes a
|
# plugin in the first place is via the Tox provisioning environment, it quickly becomes a
|
||||||
# chicken-and-egg problem.
|
# chicken-and-egg problem.
|
||||||
if action.name == venv.envconfig.config.provision_tox_env:
|
if isinstance(venv, PackageToxEnv):
|
||||||
raise exceptions.SkipEnvironment(
|
raise exceptions.SkipEnvironment(f"Skipping Tox provisioning env '{venv.name}'")
|
||||||
f"Skipping Tox provisioning env '{action.name}'"
|
|
||||||
)
|
|
||||||
|
|
||||||
# Skip running the plugin for the packaging environment. PEP-517 front ends can handle
|
if venv.options.require_poetry:
|
||||||
# that better than we can, so let them do their thing. More to the point: if you're having
|
|
||||||
# problems in the packaging env that this plugin would solve, god help you.
|
|
||||||
if action.name == venv.envconfig.config.isolated_build_env:
|
|
||||||
raise exceptions.SkipEnvironment(
|
|
||||||
f"Skipping isolated packaging build env '{action.name}'"
|
|
||||||
)
|
|
||||||
|
|
||||||
if venv.envconfig.config.option.require_poetry:
|
|
||||||
logger.warning(
|
logger.warning(
|
||||||
"DEPRECATION: The '--require-poetry' runtime option is deprecated and will be "
|
"DEPRECATION: The '--require-poetry' runtime option is deprecated and will be "
|
||||||
"removed in version 1.0.0. Please update test environments that require Poetry to "
|
"removed in version 1.0.0. Please update test environments that require Poetry to "
|
||||||
"set the 'require_poetry = true' option in tox.ini"
|
"set the 'require_poetry = true' option in tox.ini"
|
||||||
)
|
)
|
||||||
|
|
||||||
if venv.envconfig.config.option.parallelize_locked_install is not None:
|
|
||||||
logger.warning(
|
|
||||||
"DEPRECATION: The '--parallelize-locked-install' option is deprecated and will "
|
|
||||||
"be removed in version 1.0.0. Please use the '--parallel-install-threads' option."
|
|
||||||
)
|
|
||||||
|
|
||||||
if venv.envconfig.install_dev_deps:
|
|
||||||
logger.warning(
|
|
||||||
"DEPRECATION: The 'install_dev_deps' option is deprecated and will be removed in "
|
|
||||||
"version 1.0.0. Please update test environments that install development dependencies "
|
|
||||||
"to set the 'poetry_dev_groups = [dev]' option in tox.ini"
|
|
||||||
)
|
|
||||||
|
|
||||||
from tox_poetry_installer import _poetry
|
from tox_poetry_installer import _poetry
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return _poetry.Factory().create_poetry(venv.envconfig.config.toxinidir)
|
return _poetry.Factory().create_poetry(venv.core["tox_root"])
|
||||||
# Support running the plugin when the current tox project does not use Poetry for its
|
# Support running the plugin when the current tox project does not use Poetry for its
|
||||||
# environment/dependency management.
|
# environment/dependency management.
|
||||||
#
|
#
|
||||||
@@ -89,7 +67,7 @@ def convert_virtualenv(venv: ToxVirtualEnv) -> "_poetry.VirtualEnv":
|
|||||||
"""
|
"""
|
||||||
from tox_poetry_installer import _poetry
|
from tox_poetry_installer import _poetry
|
||||||
|
|
||||||
return _poetry.VirtualEnv(path=Path(venv.envconfig.envdir))
|
return _poetry.VirtualEnv(path=Path(venv.env_dir))
|
||||||
|
|
||||||
|
|
||||||
def build_package_map(poetry: "_poetry.Poetry") -> PackageMap:
|
def build_package_map(poetry: "_poetry.Poetry") -> PackageMap:
|
||||||
|
|||||||
Reference in New Issue
Block a user