mirror of
https://github.com/enpaul/tox-poetry-installer.git
synced 2025-10-27 06:54:23 +00:00
Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9d4e6d76fd | |||
| 68af3a1075 | |||
| 6384f289aa | |||
| 1f6550e77c | |||
| c322e68371 | |||
|
|
603cca6fd9 | ||
|
|
1478e35c0b | ||
| 3c0b76a30f |
20
CHANGELOG.md
20
CHANGELOG.md
@@ -2,6 +2,26 @@
|
||||
|
||||
See also: [Github Release Page](https://github.com/enpaul/tox-poetry-installer/releases).
|
||||
|
||||
## Version 0.8.2
|
||||
|
||||
View this release on:
|
||||
[Github](https://github.com/enpaul/tox-poetry-installer/releases/tag/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
|
||||
package takes. Contributed by [Rebecca
|
||||
Turner](https://github.com/9999years).
|
||||
- Fix crash caused by the package-under-test depending on Poetry's unsafe dependencies ([#65](https://github.com/enpaul/tox-poetry-installer/issues/65))
|
||||
|
||||
## Version 0.8.1
|
||||
|
||||
View this release on:
|
||||
[Github](https://github.com/enpaul/tox-poetry-installer/releases/tag/0.8.1),
|
||||
[PyPI](https://pypi.org/project/tox-poetry-installer/0.8.1/)
|
||||
|
||||
- Fix unintuitive behavior of the `install_project_deps` option by ensuring the specified
|
||||
value always causes the implied action
|
||||
|
||||
## Version 0.8.0
|
||||
|
||||
View this release on:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## Copyright 2020 Ethan Paul
|
||||
## Copyright 2020, 2021 Ethan Paul
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this
|
||||
software and associated documentation files (the "Software"), to deal in the Software
|
||||
@@ -9,4 +9,9 @@ to whom the Software is furnished to do so, subject to the following conditions:
|
||||
The above copyright notice and this permission notice shall be included in all copies or
|
||||
substantial portions of the Software.
|
||||
|
||||
**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.**
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
|
||||
FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
DEALINGS IN THE SOFTWARE.
|
||||
|
||||
@@ -231,6 +231,7 @@ error will be set to one of the "Status" values below to indicate what the error
|
||||
| `LockedDepNotFoundError` | Indicates that an item specified in the `locked_deps` config option does not match the name of a package in the Poetry lockfile. |
|
||||
| `LockedDepsRequiredError` | Indicates that a test environment with the `require_locked_deps` config option set to `true` also specified unlocked dependencies using the [`deps`](https://tox.readthedocs.io/en/latest/config.html#conf-deps) config option. |
|
||||
| `PoetryNotInstalledError` | Indicates that the `poetry` module could not be imported under the current runtime environment, and the `--require-poetry` flag was provided. |
|
||||
| `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 of
|
||||
> sync with the Poetry lockfile. If this is the case, than a warning will be logged when Tox
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[tool.poetry]
|
||||
name = "tox-poetry-installer"
|
||||
version = "0.8.1"
|
||||
version = "0.8.2"
|
||||
license = "MIT"
|
||||
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"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# pylint: disable=missing-docstring
|
||||
__title__ = "tox-poetry-installer"
|
||||
__summary__ = "A plugin for Tox that lets you install test environment dependencies from the Poetry lockfile"
|
||||
__version__ = "0.8.1"
|
||||
__version__ = "0.8.2"
|
||||
__url__ = "https://github.com/enpaul/tox-poetry-installer/"
|
||||
__license__ = "MIT"
|
||||
__authors__ = ["Ethan Paul <24588726+enpaul@users.noreply.github.com>"]
|
||||
|
||||
@@ -11,6 +11,7 @@ All exceptions should inherit from the common base exception :exc:`ToxPoetryInst
|
||||
+-- LockedDepNotFoundError
|
||||
+-- ExtraNotFoundError
|
||||
+-- LockedDepsRequiredError
|
||||
+-- RequiresUnsafeDepError
|
||||
|
||||
"""
|
||||
|
||||
@@ -41,3 +42,7 @@ class ExtraNotFoundError(ToxPoetryInstallerException):
|
||||
|
||||
class LockedDepsRequiredError(ToxPoetryInstallerException):
|
||||
"""Environment cannot specify unlocked dependencies when locked dependencies are required"""
|
||||
|
||||
|
||||
class RequiresUnsafeDepError(ToxPoetryInstallerException):
|
||||
"""Package under test depends on an unsafe dependency and cannot be installed"""
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
import concurrent.futures
|
||||
import contextlib
|
||||
import typing
|
||||
from datetime import datetime
|
||||
from typing import Sequence
|
||||
from typing import Set
|
||||
|
||||
@@ -46,6 +47,13 @@ def install(
|
||||
|
||||
installed: Set[PoetryPackage] = set()
|
||||
|
||||
def logged_install(dependency: PoetryPackage) -> None:
|
||||
start = datetime.now()
|
||||
logger.debug(f"Installing {dependency}")
|
||||
pip.install(dependency)
|
||||
end = datetime.now()
|
||||
logger.debug(f"Finished installing {dependency} in {end - start}")
|
||||
|
||||
@contextlib.contextmanager
|
||||
def _optional_parallelize():
|
||||
"""A bit of cheat, really
|
||||
@@ -66,8 +74,8 @@ def install(
|
||||
for dependency in packages:
|
||||
if dependency not in installed:
|
||||
installed.add(dependency)
|
||||
logger.debug(f"Installing {dependency}")
|
||||
executor(pip.install, dependency)
|
||||
logger.debug(f"Queuing {dependency}")
|
||||
executor(logged_install, dependency)
|
||||
else:
|
||||
logger.debug(f"Skipping {dependency}, already installed")
|
||||
logger.debug("Waiting for installs to finish...")
|
||||
|
||||
@@ -166,6 +166,11 @@ def find_project_deps(
|
||||
:param extras: Sequence of extra names to include the dependencies of
|
||||
"""
|
||||
|
||||
if any(dep.name in constants.UNSAFE_PACKAGES for dep in poetry.package.requires):
|
||||
raise exceptions.RequiresUnsafeDepError(
|
||||
f"Project package requires one or more unsafe dependencies ({', '.join(constants.UNSAFE_PACKAGES)}) which cannot be installed with Poetry"
|
||||
)
|
||||
|
||||
base_deps: List[PoetryPackage] = [
|
||||
packages[item.name]
|
||||
for item in poetry.package.requires
|
||||
|
||||
Reference in New Issue
Block a user