mirror of
https://github.com/enpaul/tox-poetry-installer.git
synced 2025-10-28 07:00:43 +00:00
Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e3b3b19b31 | |||
| 99d6eedff1 | |||
| ff09706648 | |||
| 9ec64cf98f | |||
| 59bf9ad26e | |||
| 366c50ac87 | |||
| 6e535f0f42 | |||
| af66cd6d06 | |||
| f6c8001546 | |||
| b62e13afc7 | |||
| c119e3b9d4 | |||
| 0614913cc5 | |||
| f116ffefa2 | |||
| 2ce97a5349 | |||
| e77c859355 | |||
| c1d1ac2de1 | |||
| c5c5261a80 |
4
.github/workflows/ci.yaml
vendored
4
.github/workflows/ci.yaml
vendored
@@ -40,9 +40,7 @@ jobs:
|
||||
- name: Setup:env
|
||||
run: .github/scripts/setup-env.sh
|
||||
- name: Run:${{ matrix.python.toxenv }}
|
||||
run: $HOME/ci/bin/tox \
|
||||
-e ${{ matrix.python.toxenv }} \
|
||||
--require-poetry
|
||||
run: $HOME/ci/bin/tox -e ${{ matrix.python.toxenv }} --require-poetry
|
||||
Check:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
|
||||
228
CHANGELOG.md
Normal file
228
CHANGELOG.md
Normal file
@@ -0,0 +1,228 @@
|
||||
# changelog
|
||||
|
||||
See also: [Github Release Page](https://github.com/enpaul/tox-poetry-installer/releases).
|
||||
|
||||
## Version 0.6.2
|
||||
|
||||
View this release on:
|
||||
[Github](https://github.com/enpaul/tox-poetry-installer/releases/tag/0.6.2),
|
||||
[PyPI](https://pypi.org/project/tox-poetry-installer/0.6.2/)
|
||||
|
||||
* Update locked version of `py` to `1.10.0` to address
|
||||
[CVE-2020-29651](https://nvd.nist.gov/vuln/detail/CVE-2020-29651)
|
||||
* Fix dependency identification failing when the package under test is a transient dependency
|
||||
of a locked dependency specified for installation
|
||||
* Fix `AttributeError` being raised while creating the Tox self-provisioned environment when
|
||||
using either the [`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 options
|
||||
|
||||
|
||||
## Version 0.6.1
|
||||
|
||||
View this release on:
|
||||
[Github](https://github.com/enpaul/tox-poetry-installer/releases/tag/0.6.1),
|
||||
[PyPI](https://pypi.org/project/tox-poetry-installer/0.6.1/)
|
||||
|
||||
* Update logging around transient dependency processing to improve debugging of dependency
|
||||
installation problems
|
||||
* 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))
|
||||
* Fix handling of Poetry's unsafe packages when the unsafe package is a primary (environment
|
||||
or package) dependency
|
||||
|
||||
|
||||
## Version 0.6.0
|
||||
|
||||
View this release on:
|
||||
[Github](https://github.com/enpaul/tox-poetry-installer/releases/tag/0.6.0),
|
||||
[PyPI](https://pypi.org/project/tox-poetry-installer/0.6.0/)
|
||||
|
||||
* Add `poetry` extra to support installing Poetry as a direct dependency of the plugin
|
||||
* Add `--require-poetry` runtime option to force Tox failure if Poetry is not installed
|
||||
* Update logging messages to improve UX around non-verbose messaging
|
||||
* Update error logging to avoid dumping stack traces
|
||||
* Update integration with Tox's `action` object to better manage internal state at runtime
|
||||
* Update documentation to more clearly cover more use cases
|
||||
* Remove `poetry` as a required dependency to support external Poetry installations
|
||||
|
||||
First beta release :tada:
|
||||
|
||||
|
||||
## Version 0.5.2
|
||||
|
||||
View this release on:
|
||||
[Github](https://github.com/enpaul/tox-poetry-installer/releases/tag/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 platforms
|
||||
|
||||
|
||||
## Version 0.5.1
|
||||
|
||||
View this release on:
|
||||
[Github](https://github.com/enpaul/tox-poetry-installer/releases/tag/0.5.1),
|
||||
[PyPI](https://pypi.org/project/tox-poetry-installer/0.5.1/)
|
||||
|
||||
* Add CI/Tox tests for Python-3.9
|
||||
* Update dependency processing to reduce duplication during installation
|
||||
* Update minimum python requirement to `3.6.1`
|
||||
* Fix `UnboundLocal` exception when not installing project dependencies
|
||||
|
||||
|
||||
## Version 0.5.0
|
||||
|
||||
View this release on:
|
||||
[Github](https://github.com/enpaul/tox-poetry-installer/releases/tag/0.5.0),
|
||||
[PyPI](https://pypi.org/project/tox-poetry-installer/0.5.0/)
|
||||
|
||||
* Add option `locked_deps` to better support both locked and unlocked dependencies in a
|
||||
single environment
|
||||
* Add blocking functionality when using `require_locked_deps = true` to prevent other
|
||||
hooks from running after this one
|
||||
* Update documentation to include new configuration options and errors
|
||||
* Update documentation to improve future maintainability
|
||||
* Update module structure to move from single-file module to multi-file directory module
|
||||
* Fix `RecursionError` when installing locked dependencies that specify recursive dependencies
|
||||
* Fix always reinstalling all locked dependencies on every run regardless of update status
|
||||
|
||||
|
||||
## Version 0.4.0
|
||||
|
||||
View this release on:
|
||||
[Github](https://github.com/enpaul/tox-poetry-installer/releases/tag/0.4.0),
|
||||
[PyPI](https://pypi.org/project/tox-poetry-installer/0.4.0/)
|
||||
|
||||
* Add `install_dev_deps` configuration option for automatically installing all Poetry
|
||||
dev-dependencies into a Tox testenv
|
||||
|
||||
|
||||
## Version 0.3.1
|
||||
|
||||
View this release on:
|
||||
[Github](https://github.com/enpaul/tox-poetry-installer/releases/tag/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 problem where only the dependencies of the sequentially last extra would be installed
|
||||
* Fix regression causing no project dependencies to be installed
|
||||
|
||||
|
||||
## Version 0.3.0
|
||||
|
||||
View this release on:
|
||||
[Github](https://github.com/enpaul/tox-poetry-installer/releases/tag/0.3.0),
|
||||
[PyPI](https://pypi.org/project/tox-poetry-installer/0.3.0/)
|
||||
|
||||
* Add support for the Tox [`extras`](https://tox.readthedocs.io/en/latest/config.html#conf-extras)
|
||||
configuration parameter
|
||||
* Update runtime-skip-conditional checks to improve clarity and ease of future maintenance
|
||||
* Update lockfile parsing to avoid parsing it multiple times for a single testenv
|
||||
* Fix missing `poetry-core` dependency when using Poetry<1.1.0
|
||||
|
||||
|
||||
## Version 0.2.4
|
||||
|
||||
View this release on:
|
||||
[Github](https://github.com/enpaul/tox-poetry-installer/releases/tag/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))
|
||||
* Include tests in sdist ([#8](https://github.com/enpaul/tox-poetry-installer/issues/8))
|
||||
|
||||
|
||||
## Version 0.2.3
|
||||
|
||||
View this release on:
|
||||
[Github](https://github.com/enpaul/tox-poetry-installer/releases/tag/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 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
|
||||
|
||||
View this release on:
|
||||
[Github](https://github.com/enpaul/tox-poetry-installer/releases/tag/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 environment/dependency
|
||||
management ([#1](https://github.com/enpaul/tox-poetry-installer/issues/1))
|
||||
|
||||
|
||||
## Version 0.2.1
|
||||
|
||||
View this release on:
|
||||
[Github](https://github.com/enpaul/tox-poetry-installer/releases/tag/0.2.1),
|
||||
[PyPI](https://pypi.org/project/tox-poetry-installer/0.2.1/)
|
||||
|
||||
* Fix duplicate installation of transient environment dependencies
|
||||
* Fix logging error indicating all environments always have zero dependencies
|
||||
* Fix installing main dependencies when `skip_install` is false but `skipdist` is true
|
||||
|
||||
|
||||
## Version 0.2.0
|
||||
|
||||
View this release on:
|
||||
[Github](https://github.com/enpaul/tox-poetry-installer/releases/tag/0.2.0),
|
||||
[PyPI](https://pypi.org/project/tox-poetry-installer/0.2.0/)
|
||||
|
||||
* Add support for per-environment configuration setting `require_locked_deps`
|
||||
* Add support for per-dependency lock requirement setting using `@poetry` suffix
|
||||
* Add support for coexisting locked and unlocked dependencies in a single test environment
|
||||
* Update documentation to include more usage examples
|
||||
* Update documentation to improve clarity around problems and drawbacks
|
||||
* Fix logging messages being inconsistently formatted
|
||||
* Fix raising the same exception for "locked dependency not found" and "locked dependency
|
||||
specifies alternate version" errors
|
||||
* Fix plugin errors not reporting to Tox that they happened
|
||||
* Fix plugin errors not causing Tox to mark the env as failed
|
||||
|
||||
|
||||
## Version 0.1.3
|
||||
|
||||
View this release on:
|
||||
[Github](https://github.com/enpaul/tox-poetry-installer/releases/tag/0.1.3),
|
||||
[PyPI](https://pypi.org/project/tox-poetry-installer/0.1.3/)
|
||||
|
||||
* Fix core functionality of installing dependencies from lockfile for the package-under-development
|
||||
("dev-package") built by Tox
|
||||
* Fix log messages not being displayed with Tox output
|
||||
* Add additional logging output for diagnostics
|
||||
* Update Poetry requirement to exclude upcoming Poetry-1.1.0 release which will break compatibility
|
||||
|
||||
This is the first release where the core functionality actually works as expected :tada:
|
||||
|
||||
|
||||
## Version 0.1.2
|
||||
|
||||
View this release on:
|
||||
[Github](https://github.com/enpaul/tox-poetry-installer/releases/tag/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
|
||||
* Fix disagreement between `pyproject.toml` and module metadata on what the current version is
|
||||
* Fix constant named for PEP-440 that should have been named for PEP-508
|
||||
|
||||
|
||||
## Version 0.1.1
|
||||
|
||||
View this release on:
|
||||
[Github](https://github.com/enpaul/tox-poetry-installer/releases/tag/0.1.1),
|
||||
[PyPI](https://pypi.org/project/tox-poetry-installer/0.1.1/)
|
||||
|
||||
* Add/update project documentation
|
||||
* Add static analysis and formatting enforcement automation to toxfile
|
||||
* Add security analysis to toxfile
|
||||
* Fix raising `KeyError` for unlocked dependencies
|
||||
* Fix mishandling of Poetry's "unsafe dependencies"
|
||||
* Lint, blacken, and generally improve code quality
|
||||
|
||||
|
||||
## Version 0.1.0
|
||||
|
||||
View this release on:
|
||||
[Github](https://github.com/enpaul/tox-poetry-installer/releases/tag/0.1.0),
|
||||
|
||||
* Add support for installing Tox environment dependencies using Poetry from the Poetry lockfile
|
||||
@@ -12,6 +12,8 @@ dependencies to be installed using [Poetry](https://python-poetry.org/) from its
|
||||
[](https://www.python.org)
|
||||
[](https://github.com/psf/black)
|
||||
|
||||
See the [Changelog](https://github.com/enpaul/tox-poetry-installer/blob/devel/CHANGELOG.md) for release history.
|
||||
|
||||
**Documentation**
|
||||
|
||||
* [Introduction](#introduction)
|
||||
|
||||
17
poetry.lock
generated
17
poetry.lock
generated
@@ -752,7 +752,7 @@ python-versions = "*"
|
||||
|
||||
[[package]]
|
||||
name = "py"
|
||||
version = "1.9.0"
|
||||
version = "1.10.0"
|
||||
description = "library with cross-python path, ini-parsing, io, code, log facilities"
|
||||
category = "main"
|
||||
optional = false
|
||||
@@ -1216,11 +1216,13 @@ cffi = [
|
||||
{file = "cffi-1.14.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a7711edca4dcef1a75257b50a2fbfe92a65187c47dab5a0f1b9b332c5919a3fb"},
|
||||
{file = "cffi-1.14.4-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:00e28066507bfc3fe865a31f325c8391a1ac2916219340f87dfad602c3e48e5d"},
|
||||
{file = "cffi-1.14.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:798caa2a2384b1cbe8a2a139d80734c9db54f9cc155c99d7cc92441a23871c03"},
|
||||
{file = "cffi-1.14.4-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:a5ed8c05548b54b998b9498753fb9cadbfd92ee88e884641377d8a8b291bcc01"},
|
||||
{file = "cffi-1.14.4-cp37-cp37m-win32.whl", hash = "sha256:00a1ba5e2e95684448de9b89888ccd02c98d512064b4cb987d48f4b40aa0421e"},
|
||||
{file = "cffi-1.14.4-cp37-cp37m-win_amd64.whl", hash = "sha256:9cc46bc107224ff5b6d04369e7c595acb700c3613ad7bcf2e2012f62ece80c35"},
|
||||
{file = "cffi-1.14.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:df5169c4396adc04f9b0a05f13c074df878b6052430e03f50e68adf3a57aa28d"},
|
||||
{file = "cffi-1.14.4-cp38-cp38-manylinux1_i686.whl", hash = "sha256:9ffb888f19d54a4d4dfd4b3f29bc2c16aa4972f1c2ab9c4ab09b8ab8685b9c2b"},
|
||||
{file = "cffi-1.14.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8d6603078baf4e11edc4168a514c5ce5b3ba6e3e9c374298cb88437957960a53"},
|
||||
{file = "cffi-1.14.4-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:d5ff0621c88ce83a28a10d2ce719b2ee85635e85c515f12bac99a95306da4b2e"},
|
||||
{file = "cffi-1.14.4-cp38-cp38-win32.whl", hash = "sha256:b4e248d1087abf9f4c10f3c398896c87ce82a9856494a7155823eb45a892395d"},
|
||||
{file = "cffi-1.14.4-cp38-cp38-win_amd64.whl", hash = "sha256:ec80dc47f54e6e9a78181ce05feb71a0353854cc26999db963695f950b5fb375"},
|
||||
{file = "cffi-1.14.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:840793c68105fe031f34d6a086eaea153a0cd5c491cde82a74b420edd0a2b909"},
|
||||
@@ -1530,8 +1532,8 @@ ptyprocess = [
|
||||
{file = "ptyprocess-0.6.0.tar.gz", hash = "sha256:923f299cc5ad920c68f2bc0bc98b75b9f838b93b599941a6b63ddbc2476394c0"},
|
||||
]
|
||||
py = [
|
||||
{file = "py-1.9.0-py2.py3-none-any.whl", hash = "sha256:366389d1db726cd2fcfc79732e75410e5fe4d31db13692115529d34069a043c2"},
|
||||
{file = "py-1.9.0.tar.gz", hash = "sha256:9ca6883ce56b4e8da7e79ac18787889fa5206c79dcc67fb065376cd2fe03f342"},
|
||||
{file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"},
|
||||
{file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"},
|
||||
]
|
||||
pycparser = [
|
||||
{file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"},
|
||||
@@ -1576,6 +1578,8 @@ pyyaml = [
|
||||
{file = "PyYAML-5.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:73f099454b799e05e5ab51423c7bcf361c58d3206fa7b0d555426b1f4d9a3eaf"},
|
||||
{file = "PyYAML-5.3.1-cp38-cp38-win32.whl", hash = "sha256:06a0d7ba600ce0b2d2fe2e78453a470b5a6e000a985dd4a4e54e436cc36b0e97"},
|
||||
{file = "PyYAML-5.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:95f71d2af0ff4227885f7a6605c37fd53d3a106fcab511b8860ecca9fcf400ee"},
|
||||
{file = "PyYAML-5.3.1-cp39-cp39-win32.whl", hash = "sha256:ad9c67312c84def58f3c04504727ca879cb0013b2517c85a9a253f0cb6380c0a"},
|
||||
{file = "PyYAML-5.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:6034f55dab5fea9e53f436aa68fa3ace2634918e8b5994d82f3621c04ff5ed2e"},
|
||||
{file = "PyYAML-5.3.1.tar.gz", hash = "sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d"},
|
||||
]
|
||||
regex = [
|
||||
@@ -1645,22 +1649,29 @@ requests-toolbelt = [
|
||||
{file = "ruamel.yaml.clib-0.2.2-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:73b3d43e04cc4b228fa6fa5d796409ece6fcb53a6c270eb2048109cbcbc3b9c2"},
|
||||
{file = "ruamel.yaml.clib-0.2.2-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:53b9dd1abd70e257a6e32f934ebc482dac5edb8c93e23deb663eac724c30b026"},
|
||||
{file = "ruamel.yaml.clib-0.2.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:839dd72545ef7ba78fd2aa1a5dd07b33696adf3e68fae7f31327161c1093001b"},
|
||||
{file = "ruamel.yaml.clib-0.2.2-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:1236df55e0f73cd138c0eca074ee086136c3f16a97c2ac719032c050f7e0622f"},
|
||||
{file = "ruamel.yaml.clib-0.2.2-cp35-cp35m-win32.whl", hash = "sha256:b1e981fe1aff1fd11627f531524826a4dcc1f26c726235a52fcb62ded27d150f"},
|
||||
{file = "ruamel.yaml.clib-0.2.2-cp35-cp35m-win_amd64.whl", hash = "sha256:4e52c96ca66de04be42ea2278012a2342d89f5e82b4512fb6fb7134e377e2e62"},
|
||||
{file = "ruamel.yaml.clib-0.2.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a873e4d4954f865dcb60bdc4914af7eaae48fb56b60ed6daa1d6251c72f5337c"},
|
||||
{file = "ruamel.yaml.clib-0.2.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:ab845f1f51f7eb750a78937be9f79baea4a42c7960f5a94dde34e69f3cce1988"},
|
||||
{file = "ruamel.yaml.clib-0.2.2-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:2fd336a5c6415c82e2deb40d08c222087febe0aebe520f4d21910629018ab0f3"},
|
||||
{file = "ruamel.yaml.clib-0.2.2-cp36-cp36m-win32.whl", hash = "sha256:e9f7d1d8c26a6a12c23421061f9022bb62704e38211fe375c645485f38df34a2"},
|
||||
{file = "ruamel.yaml.clib-0.2.2-cp36-cp36m-win_amd64.whl", hash = "sha256:2602e91bd5c1b874d6f93d3086f9830f3e907c543c7672cf293a97c3fabdcd91"},
|
||||
{file = "ruamel.yaml.clib-0.2.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:44c7b0498c39f27795224438f1a6be6c5352f82cb887bc33d962c3a3acc00df6"},
|
||||
{file = "ruamel.yaml.clib-0.2.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:8e8fd0a22c9d92af3a34f91e8a2594eeb35cba90ab643c5e0e643567dc8be43e"},
|
||||
{file = "ruamel.yaml.clib-0.2.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:75f0ee6839532e52a3a53f80ce64925ed4aed697dd3fa890c4c918f3304bd4f4"},
|
||||
{file = "ruamel.yaml.clib-0.2.2-cp37-cp37m-win32.whl", hash = "sha256:464e66a04e740d754170be5e740657a3b3b6d2bcc567f0c3437879a6e6087ff6"},
|
||||
{file = "ruamel.yaml.clib-0.2.2-cp37-cp37m-win_amd64.whl", hash = "sha256:52ae5739e4b5d6317b52f5b040b1b6639e8af68a5b8fd606a8b08658fbd0cab5"},
|
||||
{file = "ruamel.yaml.clib-0.2.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4df5019e7783d14b79217ad9c56edf1ba7485d614ad5a385d1b3c768635c81c0"},
|
||||
{file = "ruamel.yaml.clib-0.2.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:5254af7d8bdf4d5484c089f929cb7f5bafa59b4f01d4f48adda4be41e6d29f99"},
|
||||
{file = "ruamel.yaml.clib-0.2.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:8be05be57dc5c7b4a0b24edcaa2f7275866d9c907725226cdde46da09367d923"},
|
||||
{file = "ruamel.yaml.clib-0.2.2-cp38-cp38-win32.whl", hash = "sha256:74161d827407f4db9072011adcfb825b5258a5ccb3d2cd518dd6c9edea9e30f1"},
|
||||
{file = "ruamel.yaml.clib-0.2.2-cp38-cp38-win_amd64.whl", hash = "sha256:058a1cc3df2a8aecc12f983a48bda99315cebf55a3b3a5463e37bb599b05727b"},
|
||||
{file = "ruamel.yaml.clib-0.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c6ac7e45367b1317e56f1461719c853fd6825226f45b835df7436bb04031fd8a"},
|
||||
{file = "ruamel.yaml.clib-0.2.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:b4b0d31f2052b3f9f9b5327024dc629a253a83d8649d4734ca7f35b60ec3e9e5"},
|
||||
{file = "ruamel.yaml.clib-0.2.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:1f8c0a4577c0e6c99d208de5c4d3fd8aceed9574bb154d7a2b21c16bb924154c"},
|
||||
{file = "ruamel.yaml.clib-0.2.2-cp39-cp39-win32.whl", hash = "sha256:46d6d20815064e8bb023ea8628cfb7402c0f0e83de2c2227a88097e239a7dffd"},
|
||||
{file = "ruamel.yaml.clib-0.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:6c0a5dc52fc74eb87c67374a4e554d4761fd42a4d01390b7e868b30d21f4b8bb"},
|
||||
{file = "ruamel.yaml.clib-0.2.2.tar.gz", hash = "sha256:2d24bd98af676f4990c4d715bcdc2a60b19c56a3fb3a763164d2d8ca0e806ba7"},
|
||||
]
|
||||
safety = [
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[tool.poetry]
|
||||
name = "tox-poetry-installer"
|
||||
version = "0.6.0"
|
||||
version = "0.6.2"
|
||||
license = "MIT"
|
||||
authors = ["Ethan Paul <24588726+enpaul@users.noreply.github.com>"]
|
||||
description = "Tox plugin to install Tox environment dependencies using the Poetry backend and lockfile"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# pylint: disable=missing-docstring
|
||||
__title__ = "tox-poetry-installer"
|
||||
__summary__ = "Tox plugin to install Tox environment dependencies using the Poetry backend and lockfile"
|
||||
__version__ = "0.6.0"
|
||||
__version__ = "0.6.2"
|
||||
__url__ = "https://github.com/enpaul/tox-poetry-installer/"
|
||||
__license__ = "MIT"
|
||||
__authors__ = ["Ethan Paul <24588726+enpaul@users.noreply.github.com>"]
|
||||
|
||||
@@ -112,7 +112,9 @@ def tox_testenv_install_deps(venv: ToxVirtualEnv, action: ToxAction) -> Optional
|
||||
|
||||
env_deps: List[PoetryPackage] = []
|
||||
for dep in venv.envconfig.locked_deps:
|
||||
env_deps += utilities.find_transients(package_map, dep.lower())
|
||||
env_deps += utilities.find_transients(
|
||||
package_map, dep.lower(), allow_missing=[poetry.package.name]
|
||||
)
|
||||
reporter.verbosity1(
|
||||
f"{constants.REPORTER_PREFIX} Identified {len(env_deps)} environment dependencies to install to env"
|
||||
)
|
||||
|
||||
@@ -48,13 +48,17 @@ def install_to_venv(
|
||||
installer.install(dependency)
|
||||
|
||||
|
||||
def find_transients(packages: PackageMap, dependency_name: str) -> Set[PoetryPackage]:
|
||||
def find_transients(
|
||||
packages: PackageMap, dependency_name: str, allow_missing: Sequence[str] = ()
|
||||
) -> Set[PoetryPackage]:
|
||||
"""Using a poetry object identify all dependencies of a specific dependency
|
||||
|
||||
:param poetry: Populated poetry object which can be used to build a populated locked
|
||||
repository object.
|
||||
:param packages: All packages from the lockfile to use for identifying dependency relationships.
|
||||
:param dependency_name: Bare name (without version) of the dependency to fetch the transient
|
||||
dependencies of.
|
||||
:param allow_missing: Sequence of package names to allow to be missing from the lockfile. Any
|
||||
packages that are not found in the lockfile but their name appears in this
|
||||
list will be silently skipped from installation.
|
||||
:returns: List of packages that need to be installed for the requested dependency.
|
||||
|
||||
.. note:: The package corresponding to the dependency named by ``dependency_name`` is included
|
||||
@@ -62,21 +66,30 @@ def find_transients(packages: PackageMap, dependency_name: str) -> Set[PoetryPac
|
||||
"""
|
||||
from tox_poetry_installer import _poetry
|
||||
|
||||
try:
|
||||
|
||||
def find_deps_of_deps(name: str, searched: Set[str]) -> PackageMap:
|
||||
package = packages[name]
|
||||
transients: PackageMap = {}
|
||||
searched.update([name])
|
||||
searched.add(name)
|
||||
|
||||
if name in _poetry.Provider.UNSAFE_PACKAGES:
|
||||
reporter.warning(
|
||||
f"{constants.REPORTER_PREFIX} Installing package '{name}' using Poetry is not supported; skipping installation of package '{name}'"
|
||||
f"{constants.REPORTER_PREFIX} Installing package '{name}' using Poetry is not supported and will be skipped"
|
||||
)
|
||||
reporter.verbosity2(
|
||||
f"{constants.REPORTER_PREFIX} Skip {package}: designated unsafe by Poetry"
|
||||
f"{constants.REPORTER_PREFIX} Skip {name}: designated unsafe by Poetry"
|
||||
)
|
||||
elif not package.python_constraint.allows(constants.PLATFORM_VERSION):
|
||||
return dict()
|
||||
|
||||
transients: PackageMap = {}
|
||||
try:
|
||||
package = packages[name]
|
||||
except KeyError as err:
|
||||
if name in allow_missing:
|
||||
reporter.verbosity2(
|
||||
f"{constants.REPORTER_PREFIX} Skip {name}: package is not in lockfile but designated as allowed to be missing"
|
||||
)
|
||||
return dict()
|
||||
raise err
|
||||
|
||||
if not package.python_constraint.allows(constants.PLATFORM_VERSION):
|
||||
reporter.verbosity2(
|
||||
f"{constants.REPORTER_PREFIX} Skip {package}: incompatible Python requirement '{package.python_constraint}' for current version '{constants.PLATFORM_VERSION}'"
|
||||
)
|
||||
@@ -85,21 +98,36 @@ def find_transients(packages: PackageMap, dependency_name: str) -> Set[PoetryPac
|
||||
f"{constants.REPORTER_PREFIX} Skip {package}: incompatible platform requirement '{package.platform}' for current platform '{sys.platform}'"
|
||||
)
|
||||
else:
|
||||
reporter.verbosity2(f"{constants.REPORTER_PREFIX} Include {package}")
|
||||
reporter.verbosity2(
|
||||
f"{constants.REPORTER_PREFIX} Including {package} for installation"
|
||||
)
|
||||
transients[name] = package
|
||||
for dep in package.requires:
|
||||
for index, dep in enumerate(package.requires):
|
||||
reporter.verbosity2(
|
||||
f"{constants.REPORTER_PREFIX} Processing dependency {index + 1}/{len(package.requires)} for {package}: {dep.name}"
|
||||
)
|
||||
if dep.name not in searched:
|
||||
transients.update(find_deps_of_deps(dep.name, searched))
|
||||
else:
|
||||
reporter.verbosity2(
|
||||
f"{constants.REPORTER_PREFIX} Package with name '{dep.name}' has already been processed, skipping"
|
||||
)
|
||||
|
||||
return transients
|
||||
|
||||
searched: Set[str] = set()
|
||||
|
||||
try:
|
||||
transients: PackageMap = find_deps_of_deps(
|
||||
packages[dependency_name].name, searched
|
||||
)
|
||||
|
||||
return set(transients.values())
|
||||
except KeyError:
|
||||
if dependency_name in _poetry.Provider.UNSAFE_PACKAGES:
|
||||
reporter.warning(
|
||||
f"{constants.REPORTER_PREFIX} Installing package '{dependency_name}' using Poetry is not supported and will be skipped"
|
||||
)
|
||||
return set()
|
||||
|
||||
if any(
|
||||
delimiter in dependency_name
|
||||
for delimiter in constants.PEP508_VERSION_DELIMITERS
|
||||
@@ -107,13 +135,26 @@ def find_transients(packages: PackageMap, dependency_name: str) -> Set[PoetryPac
|
||||
raise exceptions.LockedDepVersionConflictError(
|
||||
f"Locked dependency '{dependency_name}' cannot include version specifier"
|
||||
) from None
|
||||
|
||||
raise exceptions.LockedDepNotFoundError(
|
||||
f"No version of locked dependency '{dependency_name}' found in the project lockfile"
|
||||
) from None
|
||||
|
||||
return set(transients.values())
|
||||
|
||||
|
||||
def check_preconditions(venv: ToxVirtualEnv, action: ToxAction) -> "_poetry.Poetry":
|
||||
"""Check that the local project environment meets expectations"""
|
||||
# Skip running the plugin for the provisioning environment. The provisioned environment,
|
||||
# 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
|
||||
# plugin in the first place is via the Tox provisioning environment, it quickly becomes a
|
||||
# chicken-and-egg problem.
|
||||
if action.name == venv.envconfig.config.provision_tox_env:
|
||||
raise exceptions.SkipEnvironment(
|
||||
f"Skipping Tox provisioning env '{action.name}'"
|
||||
)
|
||||
|
||||
# Skip running the plugin for the packaging environment. PEP-517 front ends can handle
|
||||
# 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.
|
||||
@@ -171,6 +212,8 @@ def find_project_dependencies(
|
||||
|
||||
dependencies: List[PoetryPackage] = []
|
||||
for dep in base_dependencies + extra_dependencies:
|
||||
dependencies += find_transients(packages, dep.name.lower())
|
||||
dependencies += find_transients(
|
||||
packages, dep.name.lower(), allow_missing=[poetry.package.name]
|
||||
)
|
||||
|
||||
return dependencies
|
||||
|
||||
Reference in New Issue
Block a user