Commit fb13b3a6 by David Hotham Committed by GitHub

locker: refactor dependency walk logic

Resolves: #5141
parent eb27f816
from __future__ import annotations from __future__ import annotations
import itertools
import urllib.parse import urllib.parse
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
...@@ -70,21 +69,22 @@ class Exporter: ...@@ -70,21 +69,22 @@ class Exporter:
content = "" content = ""
dependency_lines = set() dependency_lines = set()
for package, groups in itertools.groupby( # Get project dependencies.
self._poetry.locker.get_project_dependency_packages( root_package = (
project_requires=self._poetry.package.all_requires, self._poetry.package.clone()
dev=dev, if dev
extras=extras, else self._poetry.package.with_dependency_groups(["default"], only=True)
), )
lambda dependency_package: dependency_package.package,
for dependency_package in self._poetry.locker.get_project_dependency_packages(
project_requires=root_package.all_requires,
project_python_marker=root_package.python_marker,
dev=dev,
extras=extras,
): ):
line = "" line = ""
dependency_packages = list(groups) dependency = dependency_package.dependency
dependency = dependency_packages[0].dependency package = dependency_package.package
marker = dependency.marker
for dep_package in dependency_packages[1:]:
marker = marker.union(dep_package.dependency.marker)
dependency.marker = marker
if package.develop: if package.develop:
line += "-e " line += "-e "
......
...@@ -84,7 +84,9 @@ def _export_requirements(tester: CommandTester, poetry: Poetry) -> None: ...@@ -84,7 +84,9 @@ def _export_requirements(tester: CommandTester, poetry: Poetry) -> None:
assert poetry.locker.lock.exists() assert poetry.locker.lock.exists()
expected = """\ expected = """\
foo==1.0.0 foo==1.0.0 ;\
python_version >= "2.7" and python_version < "2.8" or\
python_version >= "3.4" and python_version < "4.0"
""" """
assert content == expected assert content == expected
...@@ -113,7 +115,9 @@ def test_export_fails_on_invalid_format(tester: CommandTester, do_lock: None): ...@@ -113,7 +115,9 @@ def test_export_fails_on_invalid_format(tester: CommandTester, do_lock: None):
def test_export_prints_to_stdout_by_default(tester: CommandTester, do_lock: None): def test_export_prints_to_stdout_by_default(tester: CommandTester, do_lock: None):
tester.execute("--format requirements.txt") tester.execute("--format requirements.txt")
expected = """\ expected = """\
foo==1.0.0 foo==1.0.0 ;\
python_version >= "2.7" and python_version < "2.8" or\
python_version >= "3.4" and python_version < "4.0"
""" """
assert tester.io.fetch_output() == expected assert tester.io.fetch_output() == expected
...@@ -123,7 +127,9 @@ def test_export_uses_requirements_txt_format_by_default( ...@@ -123,7 +127,9 @@ def test_export_uses_requirements_txt_format_by_default(
): ):
tester.execute() tester.execute()
expected = """\ expected = """\
foo==1.0.0 foo==1.0.0 ;\
python_version >= "2.7" and python_version < "2.8" or\
python_version >= "3.4" and python_version < "4.0"
""" """
assert tester.io.fetch_output() == expected assert tester.io.fetch_output() == expected
...@@ -131,8 +137,12 @@ foo==1.0.0 ...@@ -131,8 +137,12 @@ foo==1.0.0
def test_export_includes_extras_by_flag(tester: CommandTester, do_lock: None): def test_export_includes_extras_by_flag(tester: CommandTester, do_lock: None):
tester.execute("--format requirements.txt --extras feature_bar") tester.execute("--format requirements.txt --extras feature_bar")
expected = """\ expected = """\
bar==1.1.0 bar==1.1.0 ;\
foo==1.0.0 python_version >= "2.7" and python_version < "2.8" or\
python_version >= "3.4" and python_version < "4.0"
foo==1.0.0 ;\
python_version >= "2.7" and python_version < "2.8" or\
python_version >= "3.4" and python_version < "4.0"
""" """
assert tester.io.fetch_output() == expected assert tester.io.fetch_output() == expected
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment