Skip to content

Commit d99c5b3

Browse files
committed
pre-release handling: remove implicit "allow-prereleases" in repository, consider explicit allow-prereleases in show, make search_for test in provider forward-compatible
1 parent 6e84663 commit d99c5b3

File tree

3 files changed

+23
-33
lines changed

3 files changed

+23
-33
lines changed

src/poetry/console/commands/show.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -520,18 +520,24 @@ def find_latest_package(
520520
from poetry.version.version_selector import VersionSelector
521521

522522
# find the latest version allowed in this pool
523+
requires = root.all_requires
523524
if package.is_direct_origin():
524-
requires = root.all_requires
525-
526525
for dep in requires:
527526
if dep.name == package.name and dep.source_type == package.source_type:
528527
provider = Provider(root, self.poetry.pool, NullIO())
529528
return provider.search_for_direct_origin_dependency(dep)
530529

530+
allow_prereleases = False
531+
for dep in requires:
532+
if dep.name == package.name:
533+
allow_prereleases = dep.allows_prereleases()
534+
531535
name = package.name
532536
selector = VersionSelector(self.poetry.pool)
533537

534-
return selector.find_best_candidate(name, f">={package.pretty_version}")
538+
return selector.find_best_candidate(
539+
name, f">={package.pretty_version}", allow_prereleases
540+
)
535541

536542
def get_update_status(self, latest: Package, package: Package) -> str:
537543
from poetry.core.constraints.version import parse_constraint

src/poetry/repositories/repository.py

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
from packaging.utils import canonicalize_name
88
from poetry.core.constraints.version import Version
9-
from poetry.core.constraints.version import VersionRange
109

1110
from poetry.repositories.abstract_repository import AbstractRepository
1211
from poetry.repositories.exceptions import PackageNotFound
@@ -34,11 +33,10 @@ def packages(self) -> list[Package]:
3433

3534
def find_packages(self, dependency: Dependency) -> list[Package]:
3635
packages = []
37-
constraint, allow_prereleases = self._get_constraints_from_dependency(
38-
dependency
39-
)
4036
ignored_pre_release_packages = []
4137

38+
constraint = dependency.constraint
39+
allow_prereleases = dependency.allows_prereleases()
4240
for package in self._find_packages(dependency.name, constraint):
4341
if package.yanked and not isinstance(constraint, Version):
4442
# PEP 592: yanked files are always ignored, unless they are the only
@@ -92,23 +90,6 @@ def search(self, query: str) -> list[Package]:
9290

9391
return results
9492

95-
@staticmethod
96-
def _get_constraints_from_dependency(
97-
dependency: Dependency,
98-
) -> tuple[VersionConstraint, bool]:
99-
constraint = dependency.constraint
100-
101-
allow_prereleases = dependency.allows_prereleases()
102-
if isinstance(constraint, VersionRange) and (
103-
constraint.max is not None
104-
and constraint.max.is_unstable()
105-
or constraint.min is not None
106-
and constraint.min.is_unstable()
107-
):
108-
allow_prereleases = True
109-
110-
return constraint, allow_prereleases
111-
11293
def _find_packages(
11394
self, name: NormalizedName, constraint: VersionConstraint
11495
) -> list[Package]:

tests/puzzle/test_provider.py

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -67,15 +67,7 @@ def provider(root: ProjectPackage, pool: RepositoryPool) -> Provider:
6767
(Dependency("foo", "<2"), [Package("foo", "1")]),
6868
(Dependency("foo", "<2", extras=["bar"]), [Package("foo", "1")]),
6969
(Dependency("foo", ">=1"), [Package("foo", "2"), Package("foo", "1")]),
70-
(
71-
Dependency("foo", ">=1a"),
72-
[
73-
Package("foo", "3a"),
74-
Package("foo", "2"),
75-
Package("foo", "2a"),
76-
Package("foo", "1"),
77-
],
78-
),
70+
(Dependency("foo", ">=1a"), [Package("foo", "2"), Package("foo", "1")]),
7971
(
8072
Dependency("foo", ">=1", allows_prereleases=True),
8173
[
@@ -101,6 +93,17 @@ def test_search_for(
10193
repository.add_package(foo2a)
10294
repository.add_package(foo2)
10395
repository.add_package(foo3a)
96+
# TODO: remove workaround when poetry-core with
97+
# https://github.com/python-poetry/poetry-core/pull/543 is available
98+
if str(dependency.constraint) == ">=1a":
99+
result = provider.search_for(dependency)
100+
assert result == expected or result == [
101+
Package("foo", "3a"),
102+
Package("foo", "2"),
103+
Package("foo", "2a"),
104+
Package("foo", "1"),
105+
]
106+
return
104107
assert provider.search_for(dependency) == expected
105108

106109

0 commit comments

Comments
 (0)