4 Commits
0.5.1 ... 0.5.2

Author SHA1 Message Date
4de5fea0e3 Merge pull request #29 from enpaul/enp/fix-platform
Fix dependency installation on incompatible platforms and with invalid python versions
2020-11-26 15:08:12 -05:00
33119df752 Add missing tests __init__ file
I'm tired of fighting this. Every tool under the sun wants the tests to
be an importable module, which doesn't make much sense to me, but it's
whatever. I'm just adding this because pylint, mypy, and others get
angry when I try to use them on just a directory without globbing
2020-11-26 15:01:59 -05:00
498cb4a3d2 Bump patch version 2020-11-26 14:54:34 -05:00
0a363d1848 Fix platform and py version compatibility errors
Add check for compatible python versions during dependency determination
Add check for compatible python platforms during dependency determination
Add verbosity2 logging messages for dependency determination
2020-11-26 14:54:34 -05:00
4 changed files with 36 additions and 9 deletions

View File

@@ -1,6 +1,6 @@
[tool.poetry]
name = "tox-poetry-installer"
version = "0.5.1"
version = "0.5.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"

0
tests/__init__.py Normal file
View File

View File

@@ -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.5.1"
__version__ = "0.5.2"
__url__ = "https://github.com/enpaul/tox-poetry-installer/"
__license__ = "MIT"
__authors__ = ["Ethan Paul <24588726+enpaul@users.noreply.github.com>"]

View File

@@ -1,9 +1,11 @@
"""Helper utility functions, usually bridging Tox and Poetry functionality"""
import sys
from pathlib import Path
from typing import Sequence
from typing import Set
from poetry.core.packages import Package as PoetryPackage
from poetry.core.semver.version import Version
from poetry.factory import Factory as PoetryFactory
from poetry.installation.pip_installer import PipInstaller as PoetryPipInstaller
from poetry.io.null_io import NullIO as PoetryNullIO
@@ -59,19 +61,44 @@ def find_transients(packages: PackageMap, dependency_name: str) -> Set[PoetryPac
try:
def find_deps_of_deps(name: str, transients: PackageMap):
def find_deps_of_deps(name: str, searched: Set[str]) -> PackageMap:
package = packages[name]
local_version = Version(
major=sys.version_info.major,
minor=sys.version_info.minor,
patch=sys.version_info.micro,
)
transients: PackageMap = {}
searched.update([name])
if name in PoetryProvider.UNSAFE_PACKAGES:
reporter.warning(
f"{constants.REPORTER_PREFIX} Installing package '{name}' using Poetry is not supported; skipping installation of package '{name}'"
)
reporter.verbosity2(
f"{constants.REPORTER_PREFIX} Skip {package}: designated unsafe by Poetry"
)
elif not package.python_constraint.allows(local_version):
reporter.verbosity2(
f"{constants.REPORTER_PREFIX} Skip {package}: incompatible Python requirement '{package.python_constraint}' for current version '{local_version}'"
)
elif package.platform is not None and package.platform != sys.platform:
reporter.verbosity2(
f"{constants.REPORTER_PREFIX} Skip {package}: incompatible platform requirement '{package.platform}' for current platform '{sys.platform}'"
)
else:
transients[name] = packages[name]
for dep in packages[name].requires:
if dep.name not in transients.keys():
find_deps_of_deps(dep.name, transients)
reporter.verbosity2(f"{constants.REPORTER_PREFIX} Include {package}")
transients[name] = package
for dep in package.requires:
if dep.name not in searched:
transients.update(find_deps_of_deps(dep.name, searched))
transients: PackageMap = {}
find_deps_of_deps(packages[dependency_name].name, transients)
return transients
searched: Set[str] = set()
transients: PackageMap = find_deps_of_deps(
packages[dependency_name].name, searched
)
return set(transients.values())
except KeyError: