Skip to content

Commit 32fc676

Browse files
committed
add 3.7 compatibility to session.install_groups
1 parent 57fab6c commit 32fc676

11 files changed

Lines changed: 1068 additions & 1339 deletions

File tree

noxfile.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@
1414

1515

1616
package = "nox_poetry"
17-
python_versions = ["3.11", "3.10", "3.9", "3.8"]
17+
python_versions = ["3.11", "3.10", "3.9", "3.8", "3.7"]
18+
poetry_versions = ["1.0.10", "1.2.0"]
1819
nox.needs_version = ">= 2021.6.6"
1920
nox.options.sessions = (
2021
"pre-commit",
@@ -152,7 +153,11 @@ def mypy(session: Session) -> None:
152153
@session
153154
@nox.parametrize(
154155
"python,poetry",
155-
[(python_versions[0], "1.2.0"), *((python, None) for python in python_versions)],
156+
[
157+
(python_versions[0], poetry_versions[0]),
158+
(python_versions[0], poetry_versions[1]),
159+
*((python, None) for python in python_versions),
160+
],
156161
)
157162
def tests(session: Session, poetry: Optional[str]) -> None:
158163
"""Run the test suite."""

poetry.lock

Lines changed: 974 additions & 1300 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ classifiers = [
1616
Changelog = "https://github.com/cjolowicz/nox-poetry/releases"
1717

1818
[tool.poetry.dependencies]
19-
python = "^3.8.1"
19+
python = "^3.7"
2020
nox = ">=2020.8.22"
2121
tomlkit = ">=0.7"
2222
packaging = ">=20.9"
@@ -42,7 +42,7 @@ darglint = ">=1.8.1"
4242
pre-commit-hooks = ">=4.1.0"
4343
furo = ">=2022.1.2"
4444
Pygments = ">=2.11.2"
45-
poetry = ">=1.2.0"
45+
poetry = ">=1.1.12"
4646
pytest-datadir = ">=1.3.1"
4747
typing-extensions = ">=4.0.1"
4848
pyupgrade = ">=2.31.0"

src/nox_poetry/poetry.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
"""Poetry interface."""
22
import sys
33
from enum import Enum
4+
from importlib import metadata
45
from pathlib import Path
56
from typing import Any
67
from typing import Iterable
@@ -10,6 +11,15 @@
1011

1112
import tomlkit
1213
from nox.sessions import Session
14+
from packaging.version import Version
15+
16+
17+
POETRY_VERSION = Version(metadata.version("poetry"))
18+
POETRY_VERSION_1_2_0 = Version("1.2.0")
19+
20+
21+
class IncompatiblePoetryVersionError(Exception):
22+
"""Installed poetry version does not meet requirements."""
1323

1424

1525
class CommandSkippedError(Exception):
@@ -94,8 +104,10 @@ def export(
94104

95105
if only_groups:
96106
args.extend(f"--only={group}" for group in only_groups)
97-
else:
107+
elif POETRY_VERSION >= POETRY_VERSION_1_2_0:
98108
args.append("--with=dev")
109+
else:
110+
args.append("--dev")
99111

100112
output = self.session.run_always(
101113
*args,

src/nox_poetry/sessions.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,11 @@
1414
from packaging.requirements import InvalidRequirement
1515
from packaging.requirements import Requirement
1616

17+
from nox_poetry.poetry import POETRY_VERSION
18+
from nox_poetry.poetry import POETRY_VERSION_1_2_0
1719
from nox_poetry.poetry import CommandSkippedError
1820
from nox_poetry.poetry import DistributionFormat
21+
from nox_poetry.poetry import IncompatiblePoetryVersionError
1922
from nox_poetry.poetry import Poetry
2023

2124

@@ -338,10 +341,21 @@ def install(self, *args: str, **kwargs: Any) -> None:
338341
def install_groups(self, groups: List[str], *args, **kwargs) -> None:
339342
"""Install all packages in the given Poetry dependency groups.
340343
344+
Raises:
345+
IncompatiblePoetryVersionError: The version of poetry installed is less than
346+
v1.2.0, which is not compatible with installing dependency groups.
347+
341348
Args:
342349
groups: The poetry dependency groups to install.
343350
args: Command-line arguments for ``pip install``.
344351
kwargs: Keyword-arguments for ``session.install``. These are the same
345352
as those for :meth:`nox.sessions.Session.run`.
346353
"""
354+
if POETRY_VERSION < POETRY_VERSION_1_2_0:
355+
raise IncompatiblePoetryVersionError(
356+
f"Installed version of poetry must be >={POETRY_VERSION_1_2_0} in "
357+
"order to install dependency groups. Current version installed: "
358+
f"{POETRY_VERSION}"
359+
)
360+
347361
return self.poetry.install_groups(groups, *args, **kwargs)

tests/functional/data/example-v1.2.0/poetry.lock

Lines changed: 30 additions & 30 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/functional/data/outdated-lockfile/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@ authors = ["Your Name <[email protected]>"]
88
python = "^3.6.1"
99

1010
[build-system]
11-
requires = ["poetry-core>=1.2.0"]
11+
requires = ["poetry-core>=1.0.0"]
1212
build-backend = "poetry.core.masonry.api"

tests/functional/data/path-dependency/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,5 @@ example = {path = "../example"}
1111
[tool.poetry.dev-dependencies]
1212

1313
[build-system]
14-
requires = ["poetry-core>=1.2.0"]
14+
requires = ["poetry-core>=1.0.0"]
1515
build-backend = "poetry.core.masonry.api"

tests/functional/data/url-dependency/pyproject.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,5 @@ poyo = {url = "https://github.com/hackebrot/poyo/archive/main.zip"}
1111
[tool.poetry.dev-dependencies]
1212

1313
[build-system]
14-
requires = ["poetry-core>=1.2.0"]
15-
build-backend = "poetry.masonry.api"
14+
requires = ["poetry-core>=1.0.0"]
15+
build-backend = "poetry.core.masonry.api"

tests/functional/test_install_groups.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,21 @@
11
"""Functional tests for the `install_groups`."""
2+
import pytest
3+
24
import nox_poetry
5+
from nox_poetry.poetry import POETRY_VERSION
6+
from nox_poetry.poetry import POETRY_VERSION_1_2_0
37
from tests.functional.conftest import Project
48
from tests.functional.conftest import list_packages
59
from tests.functional.conftest import run_nox_with_noxfile
610

711

12+
skipif_poetry_version_is_under_1_2_0 = pytest.mark.skipif(
13+
POETRY_VERSION < POETRY_VERSION_1_2_0,
14+
reason="session.install_groups() requires poetry>=1.2.0",
15+
)
16+
17+
18+
@skipif_poetry_version_is_under_1_2_0
819
def test_dev_dependencies(project: Project) -> None:
920
"""It installs only dev-dependencies on <1.2.0 example pyproject.toml."""
1021

@@ -24,6 +35,7 @@ def test(session: nox_poetry.Session) -> None:
2435
assert set(expected) == set(packages)
2536

2637

38+
@skipif_poetry_version_is_under_1_2_0
2739
def test_group_dev(group_project: Project) -> None:
2840
"""It installs only dev group on >=1.2.0 example pyproject.toml."""
2941

@@ -43,6 +55,7 @@ def test(session: nox_poetry.Session) -> None:
4355
assert set(expected) == set(packages)
4456

4557

58+
@skipif_poetry_version_is_under_1_2_0
4659
def test_two_groups(group_project: Project) -> None:
4760
"""It installs only 2 dependency groups on >=1.2.0 example pyproject.toml."""
4861

0 commit comments

Comments
 (0)