Commit 26f13f78 by Sébastien Eustace

Refactor dependencies handling to support groups

parent 52788238
...@@ -397,12 +397,19 @@ version = "1.1.0a5" ...@@ -397,12 +397,19 @@ version = "1.1.0a5"
description = "Poetry PEP 517 Build Backend" description = "Poetry PEP 517 Build Backend"
category = "main" category = "main"
optional = false optional = false
python-versions = ">=3.6,<4.0" python-versions = "^3.6"
develop = false
[package.dependencies] [package.dependencies]
dataclasses = {version = ">=0.8", markers = "python_version >= \"3.6\" and python_version < \"3.7\""} dataclasses = {version = ">=0.8", markers = "python_version >= \"3.6\" and python_version < \"3.7\""}
importlib-metadata = {version = ">=1.7.0", markers = "python_version < \"3.8\""} importlib-metadata = {version = ">=1.7.0", markers = "python_version < \"3.8\""}
[package.source]
type = "git"
url = "https://github.com/python-poetry/poetry-core.git"
reference = "master"
resolved_reference = "afaa6903f654b695d9411fb548ad10630287c19f"
[[package]] [[package]]
name = "pre-commit" name = "pre-commit"
version = "2.12.1" version = "2.12.1"
...@@ -701,7 +708,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pyt ...@@ -701,7 +708,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pyt
[metadata] [metadata]
lock-version = "1.1" lock-version = "1.1"
python-versions = "^3.6" python-versions = "^3.6"
content-hash = "ac67bc6eacbb6b633f9568d69533d80456f632c7bfb9a2aa61aa9dd98e862473" content-hash = "e38d34da68dcd63ef9f9d999f60b8e19d8da7f988031c3a6e6865d51c1fadeda"
[metadata.files] [metadata.files]
appdirs = [ appdirs = [
...@@ -967,10 +974,7 @@ pluggy = [ ...@@ -967,10 +974,7 @@ pluggy = [
{file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"}, {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"},
{file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"}, {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"},
] ]
poetry-core = [ poetry-core = []
{file = "poetry-core-1.1.0a5.tar.gz", hash = "sha256:1b886de26026865325eae86a5d12eb154b80c0add8067c106eb706757594d85f"},
{file = "poetry_core-1.1.0a5-py3-none-any.whl", hash = "sha256:b347525c1417e9b5c6aee52967eff98c0886853a9e8ab1b9dfb2659913dd37bc"},
]
pre-commit = [ pre-commit = [
{file = "pre_commit-2.12.1-py2.py3-none-any.whl", hash = "sha256:70c5ec1f30406250b706eda35e868b87e3e4ba099af8787e3e8b4b01e84f4712"}, {file = "pre_commit-2.12.1-py2.py3-none-any.whl", hash = "sha256:70c5ec1f30406250b706eda35e868b87e3e4ba099af8787e3e8b4b01e84f4712"},
{file = "pre_commit-2.12.1.tar.gz", hash = "sha256:900d3c7e1bf4cf0374bb2893c24c23304952181405b4d88c9c40b72bda1bb8a9"}, {file = "pre_commit-2.12.1.tar.gz", hash = "sha256:900d3c7e1bf4cf0374bb2893c24c23304952181405b4d88c9c40b72bda1bb8a9"},
......
...@@ -99,7 +99,7 @@ class DebugResolveCommand(InitCommand): ...@@ -99,7 +99,7 @@ class DebugResolveCommand(InitCommand):
packages = [op.package for op in ops] packages = [op.package for op in ops]
repo = Repository(packages) repo = Repository(packages)
requires = package.requires + package.dev_requires requires = package.all_requires
for pkg in repo.packages: for pkg in repo.packages:
for require in requires: for require in requires:
if pkg.name == require.name: if pkg.name == require.name:
......
...@@ -68,14 +68,17 @@ lists all packages available.""" ...@@ -68,14 +68,17 @@ lists all packages available."""
# Show tree view if requested # Show tree view if requested
if self.option("tree") and not package: if self.option("tree") and not package:
requires = self.poetry.package.requires groups = ["default"]
if include_dev: if include_dev:
requires += self.poetry.package.dev_requires groups.append("dev")
package = self.poetry.package.with_dependency_groups(groups, only=True)
requires = package.all_requires
packages = locked_repo.packages packages = locked_repo.packages
for package in packages: for pkg in packages:
for require in requires: for require in requires:
if package.name == require.name: if pkg.name == require.name:
self.display_package_tree(self._io, package, locked_repo) self.display_package_tree(self._io, pkg, locked_repo)
break break
return 0 return 0
...@@ -386,13 +389,16 @@ lists all packages available.""" ...@@ -386,13 +389,16 @@ lists all packages available."""
# find the latest version allowed in this pool # find the latest version allowed in this pool
if package.source_type in ("git", "file", "directory"): if package.source_type in ("git", "file", "directory"):
requires = self.poetry.package.requires groups = ["default"]
if include_dev: if include_dev:
requires = requires + self.poetry.package.dev_requires groups.append("dev")
root = self.poetry.package.with_dependency_groups(groups, only=True)
requires = root.all_requires
for dep in requires: for dep in requires:
if dep.name == package.name: if dep.name == package.name:
provider = Provider(self.poetry.package, self.poetry.pool, NullIO()) provider = Provider(root, self.poetry.pool, NullIO())
if dep.is_vcs(): if dep.is_vcs():
return provider.search_for_vcs(dep)[0] return provider.search_for_vcs(dep)[0]
......
...@@ -37,7 +37,9 @@ class UpdateCommand(InstallerCommand): ...@@ -37,7 +37,9 @@ class UpdateCommand(InstallerCommand):
if packages: if packages:
self._installer.whitelist({name: "*" for name in packages}) self._installer.whitelist({name: "*" for name in packages})
self._installer.dev_mode(not self.option("no-dev")) if self.option("no-dev"):
self._installer.with_groups(["dev"])
self._installer.dry_run(self.option("dry-run")) self._installer.dry_run(self.option("dry-run"))
self._installer.execute_operations(not self.option("lock")) self._installer.execute_operations(not self.option("lock"))
......
...@@ -157,7 +157,9 @@ class PackageInfo: ...@@ -157,7 +157,9 @@ class PackageInfo:
poetry_package = self._get_poetry_package(path=root_dir or self._source_url) poetry_package = self._get_poetry_package(path=root_dir or self._source_url)
if poetry_package: if poetry_package:
package.extras = poetry_package.extras package.extras = poetry_package.extras
package.requires = poetry_package.requires for dependency in poetry_package.requires:
package.add_dependency(dependency)
return package return package
seen_requirements = set() seen_requirements = set()
...@@ -191,7 +193,7 @@ class PackageInfo: ...@@ -191,7 +193,7 @@ class PackageInfo:
req = dependency.to_pep_508(with_extras=True) req = dependency.to_pep_508(with_extras=True)
if req not in seen_requirements: if req not in seen_requirements:
package.requires.append(dependency) package.add_dependency(dependency)
seen_requirements.add(req) seen_requirements.add(req)
return package return package
......
...@@ -54,8 +54,10 @@ class Installer: ...@@ -54,8 +54,10 @@ class Installer:
self._update = False self._update = False
self._verbose = False self._verbose = False
self._write_lock = True self._write_lock = True
self._dev_mode = True self._without_groups = None
self._dev_only = False self._with_groups = None
self._only_groups = None
self._execute_operations = True self._execute_operations = True
self._lock = False self._lock = False
...@@ -137,21 +139,20 @@ class Installer: ...@@ -137,21 +139,20 @@ class Installer:
def is_verbose(self) -> bool: def is_verbose(self) -> bool:
return self._verbose return self._verbose
def dev_mode(self, dev_mode: bool = True) -> "Installer": def without_groups(self, groups: List[str]) -> "Installer":
self._dev_mode = dev_mode self._without_groups = groups
return self return self
def is_dev_mode(self) -> bool: def with_groups(self, groups: List[str]) -> "Installer":
return self._dev_mode self._with_groups = groups
def dev_only(self, dev_only: bool = False) -> "Installer":
self._dev_only = dev_only
return self return self
def is_dev_only(self) -> bool: def only_groups(self, groups: List[str]) -> "Installer":
return self._dev_only self._only_groups = groups
return self
def update(self, update: bool = True) -> "Installer": def update(self, update: bool = True) -> "Installer":
self._update = update self._update = update
...@@ -283,13 +284,20 @@ class Installer: ...@@ -283,13 +284,20 @@ class Installer:
# If we are only in lock mode, no need to go any further # If we are only in lock mode, no need to go any further
return 0 return 0
root = self._package if self._without_groups or self._with_groups or self._only_groups:
if not self.is_dev_mode(): if self._with_groups:
root = root.clone() # Default dependencies and opt-in optional dependencies
del root.dev_requires[:] root = self._package.without_dependency_groups(self._with_groups)
elif self.is_dev_only(): elif self._without_groups:
root = root.clone() # Default dependencies without elected groups
del root.requires[:] root = self._package.without_dependency_groups(self._without_groups)
else:
# Only selected groups
root = self._package.with_dependency_groups(
self._only_groups, only=True
)
else:
root = self._package.without_optional_dependency_groups()
if self._io.is_verbose(): if self._io.is_verbose():
self._io.write_line("") self._io.write_line("")
...@@ -502,9 +510,7 @@ class Installer: ...@@ -502,9 +510,7 @@ class Installer:
for installed in installed_repo.packages: for installed in installed_repo.packages:
if locked.name == installed.name: if locked.name == installed.name:
is_installed = True is_installed = True
if locked.category == "dev" and not self.is_dev_mode(): if locked.optional and locked.name not in extra_packages:
ops.append(Uninstall(locked))
elif locked.optional and locked.name not in extra_packages:
# Installed but optional and not requested in extras # Installed but optional and not requested in extras
ops.append(Uninstall(locked)) ops.append(Uninstall(locked))
elif locked.version != installed.version: elif locked.version != installed.version:
...@@ -553,11 +559,6 @@ class Installer: ...@@ -553,11 +559,6 @@ class Installer:
if package.name not in extra_packages: if package.name not in extra_packages:
op.skip("Not required") op.skip("Not required")
# If the package is a dev package and dev packages
# are not requested, we skip it
if package.category == "dev" and not self.is_dev_mode():
op.skip("Dev dependencies not requested")
def _get_extra_packages(self, repo: Repository) -> List[str]: def _get_extra_packages(self, repo: Repository) -> List[str]:
""" """
Returns all package names required by extras. Returns all package names required by extras.
......
...@@ -47,7 +47,7 @@ class Locker: ...@@ -47,7 +47,7 @@ class Locker:
_VERSION = "1.1" _VERSION = "1.1"
_relevant_keys = ["dependencies", "dev-dependencies", "source", "extras"] _relevant_keys = ["dependencies", "group", "source", "extras"]
def __init__(self, lock: Union[str, Path], local_config: dict) -> None: def __init__(self, lock: Union[str, Path], local_config: dict) -> None:
self._lock = TOMLFile(lock) self._lock = TOMLFile(lock)
...@@ -128,7 +128,8 @@ class Locker: ...@@ -128,7 +128,8 @@ class Locker:
source_resolved_reference=source.get("resolved_reference"), source_resolved_reference=source.get("resolved_reference"),
) )
package.description = info.get("description", "") package.description = info.get("description", "")
package.category = info["category"] package.category = info.get("category", "main")
package.groups = info.get("groups", ["default"])
package.optional = info["optional"] package.optional = info["optional"]
if "hashes" in lock_data["metadata"]: if "hashes" in lock_data["metadata"]:
# Old lock so we create dummy files from the hashes # Old lock so we create dummy files from the hashes
......
...@@ -21,3 +21,5 @@ class ProjectPackage(_ProjectPackage): ...@@ -21,3 +21,5 @@ class ProjectPackage(_ProjectPackage):
else: else:
self._version = version self._version = version
self._pretty_version = pretty_version or version.text self._pretty_version = pretty_version or version.text
return self
...@@ -330,7 +330,8 @@ class Provider: ...@@ -330,7 +330,8 @@ class Provider:
for dep in package.extras[extra]: for dep in package.extras[extra]:
dep.activate() dep.activate()
package.requires += package.extras[extra] for extra_dep in package.extras[extra]:
package.add_dependency(extra_dep)
dependency._constraint = package.version dependency._constraint = package.version
dependency._pretty_constraint = package.version.text dependency._pretty_constraint = package.version.text
...@@ -535,10 +536,10 @@ class Provider: ...@@ -535,10 +536,10 @@ class Provider:
# - pypiwin32 (219); sys_platform == "win32" and python_version < "3.6" # - pypiwin32 (219); sys_platform == "win32" and python_version < "3.6"
duplicates = dict() duplicates = dict()
for dep in dependencies: for dep in dependencies:
if dep.name not in duplicates: if dep.complete_name not in duplicates:
duplicates[dep.name] = [] duplicates[dep.complete_name] = []
duplicates[dep.name].append(dep) duplicates[dep.complete_name].append(dep)
dependencies = [] dependencies = []
for dep_name, deps in duplicates.items(): for dep_name, deps in duplicates.items():
...@@ -699,7 +700,12 @@ class Provider: ...@@ -699,7 +700,12 @@ class Provider:
clean_dependencies.append(dep) clean_dependencies.append(dep)
package.requires = clean_dependencies package = DependencyPackage(
package.dependency, package.with_dependency_groups([], only=True)
)
for dep in clean_dependencies:
package.add_dependency(dep)
return package return package
......
...@@ -6,6 +6,7 @@ from contextlib import contextmanager ...@@ -6,6 +6,7 @@ from contextlib import contextmanager
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
from typing import Callable from typing import Callable
from typing import Dict from typing import Dict
from typing import FrozenSet
from typing import List from typing import List
from typing import Optional from typing import Optional
from typing import Tuple from typing import Tuple
...@@ -254,7 +255,7 @@ class Solver: ...@@ -254,7 +255,7 @@ class Solver:
for dep in package.requires: for dep in package.requires:
if dep not in pkg.requires: if dep not in pkg.requires:
pkg.requires.append(dep) pkg.add_dependency(dep)
return packages, depths return packages, depths
...@@ -300,7 +301,7 @@ class Solver: ...@@ -300,7 +301,7 @@ class Solver:
continue continue
if dep not in _package.requires: if dep not in _package.requires:
_package.requires.append(dep) _package.add_dependency(dep)
continue continue
...@@ -312,7 +313,9 @@ class Solver: ...@@ -312,7 +313,9 @@ class Solver:
class DFSNode: class DFSNode:
def __init__(self, id: Tuple[str, str, bool], name: str, base_name: str) -> None: def __init__(
self, id: Tuple[str, FrozenSet[str], bool], name: str, base_name: str
) -> None:
self.id = id self.id = id
self.name = name self.name = name
self.base_name = base_name self.base_name = base_name
...@@ -423,13 +426,15 @@ class PackageNode(DFSNode): ...@@ -423,13 +426,15 @@ class PackageNode(DFSNode):
if not previous: if not previous:
self.category = "dev" self.category = "dev"
self.groups = frozenset()
self.optional = True self.optional = True
else: else:
self.category = dep.category self.category = "main" if "default" in dep.groups else "dev"
self.groups = dep.groups
self.optional = dep.is_optional() self.optional = dep.is_optional()
super().__init__( super().__init__(
(package.complete_name, self.category, self.optional), (package.complete_name, self.groups, self.optional),
package.complete_name, package.complete_name,
package.name, package.name,
) )
...@@ -470,7 +475,7 @@ class PackageNode(DFSNode): ...@@ -470,7 +475,7 @@ class PackageNode(DFSNode):
# we merge the requirements # we merge the requirements
if any( if any(
child.package.name == pkg.name child.package.name == pkg.name
and child.category == dependency.category and child.groups == dependency.groups
for child in children for child in children
): ):
continue continue
...@@ -505,14 +510,20 @@ def aggregate_package_nodes( ...@@ -505,14 +510,20 @@ def aggregate_package_nodes(
) -> Tuple[Package, int]: ) -> Tuple[Package, int]:
package = nodes[0].package package = nodes[0].package
depth = max(node.depth for node in nodes) depth = max(node.depth for node in nodes)
groups = []
for node in nodes:
groups.extend(node.groups)
category = ( category = (
"main" if any(node.category == "main" for node in children + nodes) else "dev" "main" if any("default" in node.groups for node in children + nodes) else "dev"
) )
optional = all(node.optional for node in children + nodes) optional = all(node.optional for node in children + nodes)
for node in nodes: for node in nodes:
node.depth = depth node.depth = depth
node.category = category node.category = category
node.optional = optional node.optional = optional
package.category = category package.category = category
package.optional = optional package.optional = optional
return package, depth return package, depth
...@@ -31,7 +31,7 @@ generate-setup-file = false ...@@ -31,7 +31,7 @@ generate-setup-file = false
[tool.poetry.dependencies] [tool.poetry.dependencies]
python = "^3.6" python = "^3.6"
poetry-core = "~1.1.0a5" poetry-core = { git = "https://github.com/python-poetry/poetry-core.git", branch = "master" }
cleo = "^1.0.0a1" cleo = "^1.0.0a1"
crashtest = "^0.3.0" crashtest = "^0.3.0"
requests = "^2.18" requests = "^2.18"
......
...@@ -116,7 +116,7 @@ def test_add_constraint_with_extras(app, repo, tester): ...@@ -116,7 +116,7 @@ def test_add_constraint_with_extras(app, repo, tester):
cachy1 = get_package("cachy", "0.1.0") cachy1 = get_package("cachy", "0.1.0")
cachy1.extras = {"msgpack": [get_dependency("msgpack-python")]} cachy1.extras = {"msgpack": [get_dependency("msgpack-python")]}
msgpack_dep = get_dependency("msgpack-python", ">=0.5 <0.6", optional=True) msgpack_dep = get_dependency("msgpack-python", ">=0.5 <0.6", optional=True)
cachy1.requires = [msgpack_dep] cachy1.add_dependency(msgpack_dep)
repo.add_package(get_package("cachy", "0.2.0")) repo.add_package(get_package("cachy", "0.2.0"))
repo.add_package(cachy1) repo.add_package(cachy1)
...@@ -144,7 +144,7 @@ Package operations: 2 installs, 0 updates, 0 removals ...@@ -144,7 +144,7 @@ Package operations: 2 installs, 0 updates, 0 removals
def test_add_constraint_dependencies(app, repo, tester): def test_add_constraint_dependencies(app, repo, tester):
cachy2 = get_package("cachy", "0.2.0") cachy2 = get_package("cachy", "0.2.0")
msgpack_dep = get_dependency("msgpack-python", ">=0.5 <0.6") msgpack_dep = get_dependency("msgpack-python", ">=0.5 <0.6")
cachy2.requires = [msgpack_dep] cachy2.add_dependency(msgpack_dep)
repo.add_package(get_package("cachy", "0.1.0")) repo.add_package(get_package("cachy", "0.1.0"))
repo.add_package(cachy2) repo.add_package(cachy2)
...@@ -443,7 +443,7 @@ def test_add_constraint_with_extras_option(app, repo, tester): ...@@ -443,7 +443,7 @@ def test_add_constraint_with_extras_option(app, repo, tester):
cachy2 = get_package("cachy", "0.2.0") cachy2 = get_package("cachy", "0.2.0")
cachy2.extras = {"msgpack": [get_dependency("msgpack-python")]} cachy2.extras = {"msgpack": [get_dependency("msgpack-python")]}
msgpack_dep = get_dependency("msgpack-python", ">=0.5 <0.6", optional=True) msgpack_dep = get_dependency("msgpack-python", ">=0.5 <0.6", optional=True)
cachy2.requires = [msgpack_dep] cachy2.add_dependency(msgpack_dep)
repo.add_package(get_package("cachy", "0.1.0")) repo.add_package(get_package("cachy", "0.1.0"))
repo.add_package(cachy2) repo.add_package(cachy2)
...@@ -919,7 +919,7 @@ def test_add_constraint_with_extras_old_installer(app, repo, installer, old_test ...@@ -919,7 +919,7 @@ def test_add_constraint_with_extras_old_installer(app, repo, installer, old_test
cachy1 = get_package("cachy", "0.1.0") cachy1 = get_package("cachy", "0.1.0")
cachy1.extras = {"msgpack": [get_dependency("msgpack-python")]} cachy1.extras = {"msgpack": [get_dependency("msgpack-python")]}
msgpack_dep = get_dependency("msgpack-python", ">=0.5 <0.6", optional=True) msgpack_dep = get_dependency("msgpack-python", ">=0.5 <0.6", optional=True)
cachy1.requires = [msgpack_dep] cachy1.add_dependency(msgpack_dep)
repo.add_package(get_package("cachy", "0.2.0")) repo.add_package(get_package("cachy", "0.2.0"))
repo.add_package(cachy1) repo.add_package(cachy1)
...@@ -948,7 +948,7 @@ Package operations: 2 installs, 0 updates, 0 removals ...@@ -948,7 +948,7 @@ Package operations: 2 installs, 0 updates, 0 removals
def test_add_constraint_dependencies_old_installer(app, repo, installer, old_tester): def test_add_constraint_dependencies_old_installer(app, repo, installer, old_tester):
cachy2 = get_package("cachy", "0.2.0") cachy2 = get_package("cachy", "0.2.0")
msgpack_dep = get_dependency("msgpack-python", ">=0.5 <0.6") msgpack_dep = get_dependency("msgpack-python", ">=0.5 <0.6")
cachy2.requires = [msgpack_dep] cachy2.add_dependency(msgpack_dep)
repo.add_package(get_package("cachy", "0.1.0")) repo.add_package(get_package("cachy", "0.1.0"))
repo.add_package(cachy2) repo.add_package(cachy2)
...@@ -1245,7 +1245,7 @@ def test_add_constraint_with_extras_option_old_installer( ...@@ -1245,7 +1245,7 @@ def test_add_constraint_with_extras_option_old_installer(
cachy2 = get_package("cachy", "0.2.0") cachy2 = get_package("cachy", "0.2.0")
cachy2.extras = {"msgpack": [get_dependency("msgpack-python")]} cachy2.extras = {"msgpack": [get_dependency("msgpack-python")]}
msgpack_dep = get_dependency("msgpack-python", ">=0.5 <0.6", optional=True) msgpack_dep = get_dependency("msgpack-python", ">=0.5 <0.6", optional=True)
cachy2.requires = [msgpack_dep] cachy2.add_dependency(msgpack_dep)
repo.add_package(get_package("cachy", "0.1.0")) repo.add_package(get_package("cachy", "0.1.0"))
repo.add_package(cachy2) repo.add_package(cachy2)
......
...@@ -13,7 +13,7 @@ def test_show_basic_with_installed_packages(tester, poetry, installed): ...@@ -13,7 +13,7 @@ def test_show_basic_with_installed_packages(tester, poetry, installed):
poetry.package.add_dependency(Factory.create_dependency("cachy", "^0.1.0")) poetry.package.add_dependency(Factory.create_dependency("cachy", "^0.1.0"))
poetry.package.add_dependency(Factory.create_dependency("pendulum", "^2.0.0")) poetry.package.add_dependency(Factory.create_dependency("pendulum", "^2.0.0"))
poetry.package.add_dependency( poetry.package.add_dependency(
Factory.create_dependency("pytest", "^3.7.3", category="dev") Factory.create_dependency("pytest", "^3.7.3", groups=["dev"])
) )
cachy_010 = get_package("cachy", "0.1.0") cachy_010 = get_package("cachy", "0.1.0")
...@@ -1193,7 +1193,7 @@ cachy 0.2.0 ...@@ -1193,7 +1193,7 @@ cachy 0.2.0
def test_show_tree_no_dev(tester, poetry, installed): def test_show_tree_no_dev(tester, poetry, installed):
poetry.package.add_dependency(Factory.create_dependency("cachy", "^0.2.0")) poetry.package.add_dependency(Factory.create_dependency("cachy", "^0.2.0"))
poetry.package.add_dependency( poetry.package.add_dependency(
Factory.create_dependency("pytest", "^6.1.0", category="dev") Factory.create_dependency("pytest", "^6.1.0", groups=["dev"])
) )
cachy2 = get_package("cachy", "0.2.0") cachy2 = get_package("cachy", "0.2.0")
......
...@@ -46,7 +46,7 @@ functools32 = { version = "^3.2.3", markers = "python_version ~= '2.7' and sys_p ...@@ -46,7 +46,7 @@ functools32 = { version = "^3.2.3", markers = "python_version ~= '2.7' and sys_p
[tool.poetry.extras] [tool.poetry.extras]
db = [ "orator" ] db = [ "orator" ]
[tool.poetry.dev-dependencies] [tool.poetry.group.dev.dependencies]
pytest = "~3.4" pytest = "~3.4"
......
...@@ -101,7 +101,7 @@ six = "*" ...@@ -101,7 +101,7 @@ six = "*"
[metadata] [metadata]
lock-version = "1.1" lock-version = "1.1"
python-versions = "^3.8" python-versions = "^3.8"
content-hash = "0cd068218f235c162f7b74bc8faf4ce3387b82daee1c1bb7a97af034f27ee116" content-hash = "ae61bd854548e88c090780099edd400d58e6944ce9f3fc086d2f9aa5ac487f14"
[metadata.files] [metadata.files]
certifi = [ certifi = [
......
...@@ -7,7 +7,6 @@ from pathlib import Path ...@@ -7,7 +7,6 @@ from pathlib import Path
from poetry.console.application import Application from poetry.console.application import Application
from poetry.core.masonry.utils.helpers import escape_name from poetry.core.masonry.utils.helpers import escape_name
from poetry.core.masonry.utils.helpers import escape_version from poetry.core.masonry.utils.helpers import escape_version
from poetry.core.packages.dependency import Dependency
from poetry.core.packages.package import Package from poetry.core.packages.package import Package
from poetry.core.packages.utils.link import Link from poetry.core.packages.utils.link import Link
from poetry.core.toml.file import TOMLFile from poetry.core.toml.file import TOMLFile
...@@ -28,15 +27,18 @@ def get_package(name, version): ...@@ -28,15 +27,18 @@ def get_package(name, version):
def get_dependency( def get_dependency(
name, constraint=None, category="main", optional=False, allows_prereleases=False name, constraint=None, groups=None, optional=False, allows_prereleases=False
): ):
return Dependency( if constraint is None:
name, constraint = "*"
constraint or "*",
category=category, if isinstance(constraint, str):
optional=optional, constraint = {"version": constraint}
allows_prereleases=allows_prereleases,
) constraint["optional"] = optional
constraint["allow_prereleases"] = allows_prereleases
return Factory.create_dependency(name, constraint or "*", groups=groups)
def fixture(path=None): def fixture(path=None):
......
...@@ -334,13 +334,13 @@ def _configure_run_install_dev(locker, repo, package, installed): ...@@ -334,13 +334,13 @@ def _configure_run_install_dev(locker, repo, package, installed):
package.add_dependency(Factory.create_dependency("A", "~1.0")) package.add_dependency(Factory.create_dependency("A", "~1.0"))
package.add_dependency(Factory.create_dependency("B", "~1.1")) package.add_dependency(Factory.create_dependency("B", "~1.1"))
package.add_dependency(Factory.create_dependency("C", "~1.2", category="dev")) package.add_dependency(Factory.create_dependency("C", "~1.2", groups=["dev"]))
def test_run_install_no_dev(installer, locker, repo, package, installed): def test_run_install_no_group(installer, locker, repo, package, installed):
_configure_run_install_dev(locker, repo, package, installed) _configure_run_install_dev(locker, repo, package, installed)
installer.dev_mode(False) installer.with_groups(["dev"])
installer.run() installer.run()
assert 0 == installer.executor.installations_count assert 0 == installer.executor.installations_count
...@@ -348,10 +348,10 @@ def test_run_install_no_dev(installer, locker, repo, package, installed): ...@@ -348,10 +348,10 @@ def test_run_install_no_dev(installer, locker, repo, package, installed):
assert 1 == installer.executor.removals_count assert 1 == installer.executor.removals_count
def test_run_install_dev_only(installer, locker, repo, package, installed): def test_run_install_group_only(installer, locker, repo, package, installed):
_configure_run_install_dev(locker, repo, package, installed) _configure_run_install_dev(locker, repo, package, installed)
installer.dev_only(True) installer.only_groups(["dev"])
installer.run() installer.run()
assert 0 == installer.executor.installations_count assert 0 == installer.executor.installations_count
...@@ -359,18 +359,6 @@ def test_run_install_dev_only(installer, locker, repo, package, installed): ...@@ -359,18 +359,6 @@ def test_run_install_dev_only(installer, locker, repo, package, installed):
assert 2 == installer.executor.removals_count assert 2 == installer.executor.removals_count
def test_run_install_no_dev_and_dev_only(installer, locker, repo, package, installed):
_configure_run_install_dev(locker, repo, package, installed)
installer.dev_mode(False)
installer.dev_only(True)
installer.run()
assert 0 == installer.executor.installations_count
assert 0 == installer.executor.updates_count
assert 1 == installer.executor.removals_count
@pytest.mark.parametrize( @pytest.mark.parametrize(
"managed_reserved_package_names", "managed_reserved_package_names",
[ [
...@@ -439,7 +427,7 @@ def test_run_install_remove_untracked( ...@@ -439,7 +427,7 @@ def test_run_install_remove_untracked(
} }
) )
installer.dev_mode(True).remove_untracked(True) installer.remove_untracked(True)
installer.run() installer.run()
assert 0 == installer.executor.installations_count assert 0 == installer.executor.installations_count
...@@ -863,7 +851,7 @@ def test_installer_with_pypi_repository(package, locker, installed, config): ...@@ -863,7 +851,7 @@ def test_installer_with_pypi_repository(package, locker, installed, config):
NullIO(), NullEnv(), package, locker, pool, config, installed=installed NullIO(), NullEnv(), package, locker, pool, config, installed=installed
) )
package.add_dependency(Factory.create_dependency("pytest", "^3.5", category="dev")) package.add_dependency(Factory.create_dependency("pytest", "^3.5", groups=["dev"]))
installer.run() installer.run()
expected = fixture("with-pypi-repository") expected = fixture("with-pypi-repository")
...@@ -1069,7 +1057,7 @@ def test_run_changes_category_if_needed(installer, locker, repo, package): ...@@ -1069,7 +1057,7 @@ def test_run_changes_category_if_needed(installer, locker, repo, package):
package.add_dependency( package.add_dependency(
Factory.create_dependency( Factory.create_dependency(
"A", {"version": "^1.0", "optional": True}, category="dev" "A", {"version": "^1.0", "optional": True}, groups=["dev"]
) )
) )
package.add_dependency(Factory.create_dependency("B", "^1.1")) package.add_dependency(Factory.create_dependency("B", "^1.1"))
...@@ -1169,8 +1157,8 @@ def test_run_update_with_locked_extras(installer, locker, repo, package): ...@@ -1169,8 +1157,8 @@ def test_run_update_with_locked_extras(installer, locker, repo, package):
b_dependency.in_extras.append("foo") b_dependency.in_extras.append("foo")
c_dependency = get_dependency("C", "^1.0") c_dependency = get_dependency("C", "^1.0")
c_dependency.python_versions = "~2.7" c_dependency.python_versions = "~2.7"
package_a.requires.append(b_dependency) package_a.add_dependency(b_dependency)
package_a.requires.append(c_dependency) package_a.add_dependency(c_dependency)
repo.add_package(package_a) repo.add_package(package_a)
repo.add_package(get_package("B", "1.0")) repo.add_package(get_package("B", "1.0"))
...@@ -1869,7 +1857,7 @@ def test_installer_can_handle_old_lock_files( ...@@ -1869,7 +1857,7 @@ def test_installer_can_handle_old_lock_files(
pool = Pool() pool = Pool()
pool.add_repository(MockRepository()) pool.add_repository(MockRepository())
package.add_dependency(Factory.create_dependency("pytest", "^3.5", category="dev")) package.add_dependency(Factory.create_dependency("pytest", "^3.5", groups=["dev"]))
locker.locked() locker.locked()
locker.mock_lock_data(fixture("old-lock")) locker.mock_lock_data(fixture("old-lock"))
......
...@@ -281,9 +281,9 @@ def test_run_install_no_dev(installer, locker, repo, package, installed): ...@@ -281,9 +281,9 @@ def test_run_install_no_dev(installer, locker, repo, package, installed):
package.add_dependency(Factory.create_dependency("A", "~1.0")) package.add_dependency(Factory.create_dependency("A", "~1.0"))
package.add_dependency(Factory.create_dependency("B", "~1.1")) package.add_dependency(Factory.create_dependency("B", "~1.1"))
package.add_dependency(Factory.create_dependency("C", "~1.2", category="dev")) package.add_dependency(Factory.create_dependency("C", "~1.2", groups=["dev"]))
installer.dev_mode(False) installer.with_groups(["dev"])
installer.run() installer.run()
installs = installer.installer.installs installs = installer.installer.installs
...@@ -364,7 +364,7 @@ def test_run_install_remove_untracked( ...@@ -364,7 +364,7 @@ def test_run_install_remove_untracked(
} }
) )
installer.dev_mode(True).remove_untracked(True) installer.remove_untracked(True)
installer.run() installer.run()
installs = installer.installer.installs installs = installer.installer.installs
...@@ -767,7 +767,7 @@ def test_installer_with_pypi_repository(package, locker, installed, config): ...@@ -767,7 +767,7 @@ def test_installer_with_pypi_repository(package, locker, installed, config):
NullIO(), NullEnv(), package, locker, pool, config, installed=installed NullIO(), NullEnv(), package, locker, pool, config, installed=installed
) )
package.add_dependency(Factory.create_dependency("pytest", "^3.5", category="dev")) package.add_dependency(Factory.create_dependency("pytest", "^3.5", groups=["dev"]))
installer.run() installer.run()
expected = fixture("with-pypi-repository") expected = fixture("with-pypi-repository")
...@@ -974,7 +974,7 @@ def test_run_changes_category_if_needed(installer, locker, repo, package): ...@@ -974,7 +974,7 @@ def test_run_changes_category_if_needed(installer, locker, repo, package):
package.add_dependency( package.add_dependency(
Factory.create_dependency( Factory.create_dependency(
"A", {"version": "^1.0", "optional": True}, category="dev" "A", {"version": "^1.0", "optional": True}, groups=["dev"]
) )
) )
package.add_dependency(Factory.create_dependency("B", "^1.1")) package.add_dependency(Factory.create_dependency("B", "^1.1"))
...@@ -1074,8 +1074,8 @@ def test_run_update_with_locked_extras(installer, locker, repo, package): ...@@ -1074,8 +1074,8 @@ def test_run_update_with_locked_extras(installer, locker, repo, package):
b_dependency.in_extras.append("foo") b_dependency.in_extras.append("foo")
c_dependency = get_dependency("C", "^1.0") c_dependency = get_dependency("C", "^1.0")
c_dependency.python_versions = "~2.7" c_dependency.python_versions = "~2.7"
package_a.requires.append(b_dependency) package_a.add_dependency(b_dependency)
package_a.requires.append(c_dependency) package_a.add_dependency(c_dependency)
repo.add_package(package_a) repo.add_package(package_a)
repo.add_package(get_package("B", "1.0")) repo.add_package(get_package("B", "1.0"))
...@@ -1739,7 +1739,7 @@ def test_installer_can_handle_old_lock_files( ...@@ -1739,7 +1739,7 @@ def test_installer_can_handle_old_lock_files(
pool = Pool() pool = Pool()
pool.add_repository(MockRepository()) pool.add_repository(MockRepository())
package.add_dependency(Factory.create_dependency("pytest", "^3.5", category="dev")) package.add_dependency(Factory.create_dependency("pytest", "^3.5", groups=["dev"]))
locker.locked() locker.locked()
locker.mock_lock_data(fixture("old-lock")) locker.mock_lock_data(fixture("old-lock"))
......
...@@ -86,7 +86,7 @@ resolved_reference = "123456" ...@@ -86,7 +86,7 @@ resolved_reference = "123456"
[metadata] [metadata]
lock-version = "1.1" lock-version = "1.1"
python-versions = "*" python-versions = "*"
content-hash = "115cf985d932e9bf5f540555bbdd75decbb62cac81e399375fc19f6277f8c1d8" content-hash = "178f2cd01dc40e96be23a4a0ae1094816626346346618335e5ff4f0b2c0c5831"
[metadata.files] [metadata.files]
A = [ A = [
...@@ -295,7 +295,7 @@ python-versions = "*" ...@@ -295,7 +295,7 @@ python-versions = "*"
[metadata] [metadata]
lock-version = "1.1" lock-version = "1.1"
python-versions = "*" python-versions = "*"
content-hash = "115cf985d932e9bf5f540555bbdd75decbb62cac81e399375fc19f6277f8c1d8" content-hash = "178f2cd01dc40e96be23a4a0ae1094816626346346618335e5ff4f0b2c0c5831"
[metadata.files] [metadata.files]
A = [] A = []
...@@ -335,7 +335,7 @@ foo = ["B (>=1.0.0)"] ...@@ -335,7 +335,7 @@ foo = ["B (>=1.0.0)"]
[metadata] [metadata]
lock-version = "1.1" lock-version = "1.1"
python-versions = "*" python-versions = "*"
content-hash = "115cf985d932e9bf5f540555bbdd75decbb62cac81e399375fc19f6277f8c1d8" content-hash = "178f2cd01dc40e96be23a4a0ae1094816626346346618335e5ff4f0b2c0c5831"
[metadata.files] [metadata.files]
A = [] A = []
...@@ -365,7 +365,7 @@ foo = ["bar"] ...@@ -365,7 +365,7 @@ foo = ["bar"]
[metadata] [metadata]
lock-version = "1.1" lock-version = "1.1"
python-versions = "*" python-versions = "*"
content-hash = "115cf985d932e9bf5f540555bbdd75decbb62cac81e399375fc19f6277f8c1d8" content-hash = "178f2cd01dc40e96be23a4a0ae1094816626346346618335e5ff4f0b2c0c5831"
[metadata.files] [metadata.files]
A = [] A = []
...@@ -410,7 +410,7 @@ reference = "legacy" ...@@ -410,7 +410,7 @@ reference = "legacy"
[metadata] [metadata]
lock-version = "1.1" lock-version = "1.1"
python-versions = "*" python-versions = "*"
content-hash = "115cf985d932e9bf5f540555bbdd75decbb62cac81e399375fc19f6277f8c1d8" content-hash = "178f2cd01dc40e96be23a4a0ae1094816626346346618335e5ff4f0b2c0c5831"
[metadata.files] [metadata.files]
A = [] A = []
...@@ -497,7 +497,7 @@ B = {version = "^1.0.0", extras = ["a", "b", "c"], optional = true} ...@@ -497,7 +497,7 @@ B = {version = "^1.0.0", extras = ["a", "b", "c"], optional = true}
[metadata] [metadata]
lock-version = "1.1" lock-version = "1.1"
python-versions = "*" python-versions = "*"
content-hash = "115cf985d932e9bf5f540555bbdd75decbb62cac81e399375fc19f6277f8c1d8" content-hash = "178f2cd01dc40e96be23a4a0ae1094816626346346618335e5ff4f0b2c0c5831"
[metadata.files] [metadata.files]
A = [] A = []
...@@ -591,7 +591,7 @@ F = {git = "https://github.com/python-poetry/poetry.git", branch = "foo"} ...@@ -591,7 +591,7 @@ F = {git = "https://github.com/python-poetry/poetry.git", branch = "foo"}
[metadata] [metadata]
lock-version = "1.1" lock-version = "1.1"
python-versions = "*" python-versions = "*"
content-hash = "115cf985d932e9bf5f540555bbdd75decbb62cac81e399375fc19f6277f8c1d8" content-hash = "178f2cd01dc40e96be23a4a0ae1094816626346346618335e5ff4f0b2c0c5831"
[metadata.files] [metadata.files]
A = [] A = []
......
...@@ -148,7 +148,7 @@ def test_solver_with_deps(solver, repo, package): ...@@ -148,7 +148,7 @@ def test_solver_with_deps(solver, repo, package):
repo.add_package(package_b) repo.add_package(package_b)
repo.add_package(new_package_b) repo.add_package(new_package_b)
package_a.requires.append(get_dependency("B", "<1.1")) package_a.add_dependency(get_dependency("B", "<1.1"))
ops = solver.solve() ops = solver.solve()
...@@ -176,7 +176,7 @@ def test_install_honours_not_equal(solver, repo, package): ...@@ -176,7 +176,7 @@ def test_install_honours_not_equal(solver, repo, package):
repo.add_package(new_package_b12) repo.add_package(new_package_b12)
repo.add_package(new_package_b13) repo.add_package(new_package_b13)
package_a.requires.append(get_dependency("B", "<=1.3,!=1.3,!=1.2")) package_a.add_dependency(get_dependency("B", "<=1.3,!=1.3,!=1.2"))
ops = solver.solve() ops = solver.solve()
...@@ -201,10 +201,10 @@ def test_install_with_deps_in_order(solver, repo, package): ...@@ -201,10 +201,10 @@ def test_install_with_deps_in_order(solver, repo, package):
repo.add_package(package_b) repo.add_package(package_b)
repo.add_package(package_c) repo.add_package(package_c)
package_b.requires.append(get_dependency("A", ">=1.0")) package_b.add_dependency(get_dependency("A", ">=1.0"))
package_b.requires.append(get_dependency("C", ">=1.0")) package_b.add_dependency(get_dependency("C", ">=1.0"))
package_c.requires.append(get_dependency("A", ">=1.0")) package_c.add_dependency(get_dependency("A", ">=1.0"))
ops = solver.solve() ops = solver.solve()
...@@ -278,9 +278,9 @@ def test_update_with_use_latest(solver, repo, installed, package, locked): ...@@ -278,9 +278,9 @@ def test_update_with_use_latest(solver, repo, installed, package, locked):
) )
def test_solver_sets_categories(solver, repo, package): def test_solver_sets_groups(solver, repo, package):
package.add_dependency(Factory.create_dependency("A", "*")) package.add_dependency(Factory.create_dependency("A", "*"))
package.add_dependency(Factory.create_dependency("B", "*", category="dev")) package.add_dependency(Factory.create_dependency("B", "*", groups=["dev"]))
package_a = get_package("A", "1.0") package_a = get_package("A", "1.0")
package_b = get_package("B", "1.0") package_b = get_package("B", "1.0")
...@@ -429,7 +429,7 @@ def test_solver_returns_extras_if_requested(solver, repo, package): ...@@ -429,7 +429,7 @@ def test_solver_returns_extras_if_requested(solver, repo, package):
dep = get_dependency("C", "^1.0", optional=True) dep = get_dependency("C", "^1.0", optional=True)
dep.marker = parse_marker("extra == 'foo'") dep.marker = parse_marker("extra == 'foo'")
package_b.extras = {"foo": [dep]} package_b.extras = {"foo": [dep]}
package_b.requires.append(dep) package_b.add_dependency(dep)
repo.add_package(package_a) repo.add_package(package_a)
repo.add_package(package_b) repo.add_package(package_b)
...@@ -474,8 +474,8 @@ def test_solver_returns_extras_only_requested(solver, repo, package, enabled_ext ...@@ -474,8 +474,8 @@ def test_solver_returns_extras_only_requested(solver, repo, package, enabled_ext
package_b.extras = {"one": [dep10], "two": [dep20]} package_b.extras = {"one": [dep10], "two": [dep20]}
package_b.requires.append(dep10) package_b.add_dependency(dep10)
package_b.requires.append(dep20) package_b.add_dependency(dep20)
repo.add_package(package_a) repo.add_package(package_a)
repo.add_package(package_b) repo.add_package(package_b)
...@@ -523,7 +523,7 @@ def test_solver_returns_extras_when_multiple_extras_use_same_dependency( ...@@ -523,7 +523,7 @@ def test_solver_returns_extras_when_multiple_extras_use_same_dependency(
package_b.extras = {"one": [dep], "two": [dep]} package_b.extras = {"one": [dep], "two": [dep]}
package_b.requires.append(dep) package_b.add_dependency(dep)
extras = [enabled_extra] if enabled_extra is not None else [] extras = [enabled_extra] if enabled_extra is not None else []
package_a.add_dependency( package_a.add_dependency(
...@@ -574,8 +574,8 @@ def test_solver_returns_extras_only_requested_nested( ...@@ -574,8 +574,8 @@ def test_solver_returns_extras_only_requested_nested(
package_b.extras = {"one": [dep10], "two": [dep20]} package_b.extras = {"one": [dep10], "two": [dep20]}
package_b.requires.append(dep10) package_b.add_dependency(dep10)
package_b.requires.append(dep20) package_b.add_dependency(dep20)
extras = [enabled_extra] if enabled_extra is not None else [] extras = [enabled_extra] if enabled_extra is not None else []
package_a.add_dependency( package_a.add_dependency(
...@@ -824,14 +824,14 @@ def test_solver_sub_dependencies_with_not_supported_python_version_transitive( ...@@ -824,14 +824,14 @@ def test_solver_sub_dependencies_with_not_supported_python_version_transitive(
) )
def test_solver_with_dependency_in_both_main_and_dev_dependencies( def test_solver_with_dependency_in_both_default_and_dev_dependencies(
solver, repo, package solver, repo, package
): ):
solver.provider.set_package_python_versions("^3.5") solver.provider.set_package_python_versions("^3.5")
package.add_dependency(Factory.create_dependency("A", "*")) package.add_dependency(Factory.create_dependency("A", "*"))
package.add_dependency( package.add_dependency(
Factory.create_dependency( Factory.create_dependency(
"A", {"version": "*", "extras": ["foo"]}, category="dev" "A", {"version": "*", "extras": ["foo"]}, groups=["dev"]
) )
) )
...@@ -884,7 +884,7 @@ def test_solver_with_dependency_in_both_main_and_dev_dependencies_with_one_more_ ...@@ -884,7 +884,7 @@ def test_solver_with_dependency_in_both_main_and_dev_dependencies_with_one_more_
package.add_dependency(Factory.create_dependency("E", "*")) package.add_dependency(Factory.create_dependency("E", "*"))
package.add_dependency( package.add_dependency(
Factory.create_dependency( Factory.create_dependency(
"A", {"version": "*", "extras": ["foo"]}, category="dev" "A", {"version": "*", "extras": ["foo"]}, groups=["dev"]
) )
) )
...@@ -1417,8 +1417,8 @@ def test_solver_does_not_trigger_new_resolution_on_duplicate_dependencies_if_onl ...@@ -1417,8 +1417,8 @@ def test_solver_does_not_trigger_new_resolution_on_duplicate_dependencies_if_onl
package_a = get_package("A", "1.0.0") package_a = get_package("A", "1.0.0")
package_a.extras = {"foo": [dep1], "bar": [dep2]} package_a.extras = {"foo": [dep1], "bar": [dep2]}
package_a.requires.append(dep1) package_a.add_dependency(dep1)
package_a.requires.append(dep2) package_a.add_dependency(dep2)
package_b2 = get_package("B", "2.0.0") package_b2 = get_package("B", "2.0.0")
package_b1 = get_package("B", "1.0.0") package_b1 = get_package("B", "1.0.0")
...@@ -1539,7 +1539,7 @@ def test_solver_ignores_dependencies_with_incompatible_python_full_version_marke ...@@ -1539,7 +1539,7 @@ def test_solver_ignores_dependencies_with_incompatible_python_full_version_marke
package.add_dependency(Factory.create_dependency("B", "^2.0")) package.add_dependency(Factory.create_dependency("B", "^2.0"))
package_a = get_package("A", "1.0.0") package_a = get_package("A", "1.0.0")
package_a.requires.append( package_a.add_dependency(
Dependency.create_from_pep_508( Dependency.create_from_pep_508(
'B (<2.0); platform_python_implementation == "PyPy" and python_full_version < "2.7.9"' 'B (<2.0); platform_python_implementation == "PyPy" and python_full_version < "2.7.9"'
) )
...@@ -2286,12 +2286,12 @@ def test_solver_does_not_raise_conflict_for_conditional_dev_dependencies( ...@@ -2286,12 +2286,12 @@ def test_solver_does_not_raise_conflict_for_conditional_dev_dependencies(
solver.provider.set_package_python_versions("~2.7 || ^3.5") solver.provider.set_package_python_versions("~2.7 || ^3.5")
package.add_dependency( package.add_dependency(
Factory.create_dependency( Factory.create_dependency(
"A", {"version": "^1.0", "python": "~2.7"}, category="dev" "A", {"version": "^1.0", "python": "~2.7"}, groups=["dev"]
) )
) )
package.add_dependency( package.add_dependency(
Factory.create_dependency( Factory.create_dependency(
"A", {"version": "^2.0", "python": "^3.5"}, category="dev" "A", {"version": "^2.0", "python": "^3.5"}, groups=["dev"]
) )
) )
......
...@@ -62,16 +62,12 @@ def poetry(fixture_dir, locker): ...@@ -62,16 +62,12 @@ def poetry(fixture_dir, locker):
def set_package_requires(poetry, skip=None): def set_package_requires(poetry, skip=None):
skip = skip or set() skip = skip or set()
packages = poetry.locker.locked_repository(with_dev_reqs=True).packages packages = poetry.locker.locked_repository(with_dev_reqs=True).packages
poetry.package.requires = [ package = poetry.package.with_dependency_groups([], only=True)
pkg.to_dependency() for pkg in packages:
for pkg in packages if pkg.name not in skip:
if pkg.category == "main" and pkg.name not in skip package.add_dependency(pkg.to_dependency())
]
poetry.package.dev_requires = [ poetry._package = package
pkg.to_dependency()
for pkg in packages
if pkg.category == "dev" and pkg.name not in skip
]
def test_exporter_can_export_requirements_txt_with_standard_packages( def test_exporter_can_export_requirements_txt_with_standard_packages(
...@@ -483,16 +479,18 @@ def test_exporter_can_export_requirements_txt_with_nested_packages_and_markers_a ...@@ -483,16 +479,18 @@ def test_exporter_can_export_requirements_txt_with_nested_packages_and_markers_a
} }
) )
poetry.package.requires = [ root = poetry.package.with_dependency_groups([], only=True)
root.add_dependency(
Factory.create_dependency( Factory.create_dependency(
name="a", constraint=dict(version="^1.2.3", python="<3.8") name="a", constraint=dict(version="^1.2.3", python="<3.8")
), )
] )
poetry.package.dev_requires = [ root.add_dependency(
Factory.create_dependency( Factory.create_dependency(
name="b", constraint=dict(version="^4.5.6"), category="dev" name="b", constraint=dict(version="^4.5.6"), groups=["dev"]
), )
] )
poetry._package = root
exporter = Exporter(poetry) exporter = Exporter(poetry)
...@@ -825,6 +823,7 @@ def test_exporter_can_export_requirements_txt_with_git_packages(tmp_dir, poetry) ...@@ -825,6 +823,7 @@ def test_exporter_can_export_requirements_txt_with_git_packages(tmp_dir, poetry)
} }
) )
set_package_requires(poetry) set_package_requires(poetry)
print(poetry.package.all_requires)
exporter = Exporter(poetry) exporter = Exporter(poetry)
......
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