Skip to content

Commit

Permalink
allow prereleases from requirements
Browse files Browse the repository at this point in the history
  • Loading branch information
Shubh Bapna committed Sep 13, 2024
1 parent 393233a commit c36bb78
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 3 deletions.
14 changes: 11 additions & 3 deletions src/fromager/resolver.py
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,9 @@ def get_preference(
def is_satisfied_by(self, requirement: Requirement, candidate: Candidate) -> bool:
if canonicalize_name(requirement.name) != candidate.name:
return False
allow_prerelease = self.constraints.allow_prerelease(requirement.name)
allow_prerelease = self.constraints.allow_prerelease(requirement.name) or bool(
requirement.specifier.prereleases
)
return requirement.specifier.contains(
candidate.version, prereleases=allow_prerelease
) and self.constraints.is_satisfied_by(requirement.name, candidate.version)
Expand Down Expand Up @@ -291,7 +293,10 @@ def find_matches(
continue
# Skip versions that do not match the requirement. Allow prereleases only if constraints allow prereleases
if not all(
r.specifier.contains(candidate.version, prereleases=allow_prerelease)
r.specifier.contains(
candidate.version,
prereleases=(allow_prerelease or bool(r.specifier.prereleases)),
)
for r in identifier_reqs
):
if DEBUG_RESOLVER:
Expand Down Expand Up @@ -372,7 +377,10 @@ def find_matches(
continue
# Skip versions that do not match the requirement
if not all(
r.specifier.contains(version, prereleases=allow_prerelease)
r.specifier.contains(
version,
prereleases=(allow_prerelease or bool(r.specifier.prereleases)),
)
for r in identifier_reqs
):
if DEBUG_RESOLVER:
Expand Down
24 changes: 24 additions & 0 deletions tests/test_resolver.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@
<a href="https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-1.3.2-1-py3-none-any.whl#sha256=fa0238a9e31df3373b35b0bfb672c34cc92718d21f81311d8996a16de1141d8b" data-dist-info-metadata="sha256=399046cbf9ae7ebab8dfd009e2b4f748212c710a0e75ca501a72bbb2d456e2e7" data-core-metadata="sha256=399046cbf9ae7ebab8dfd009e2b4f748212c710a0e75ca501a72bbb2d456e2e7">hydra_core-1.3.2-1-py3-none-any.whl</a>
<br/>
<a href="https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-1.3.2-2-py3-none-any.whl#sha256=fa0238a9e31df3373b35b0bfb672c34cc92718d21f81311d8996a16de1141d8b" data-dist-info-metadata="sha256=399046cbf9ae7ebab8dfd009e2b4f748212c710a0e75ca501a72bbb2d456e2e7" data-core-metadata="sha256=399046cbf9ae7ebab8dfd009e2b4f748212c710a0e75ca501a72bbb2d456e2e7">hydra_core-1.3.2-2-py3-none-any.whl</a>
<br />
<a href="https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-2.0.0a1-py3-none-any.whl" >hydra_core-2.0.0a1-py3-none-any.whl</a>
</body>
</html>
<!--SERIAL 22812307-->
Expand Down Expand Up @@ -51,6 +53,28 @@ def test_provider_choose_wheel():
assert str(candidate.version) == "1.3.2"


def test_provider_choose_wheel_prereleases():
with requests_mock.Mocker() as r:
r.get(
"https://pypi.org/simple/hydra-core/",
text=_hydra_core_simple_response,
)

provider = resolver.PyPIProvider(include_sdists=False)
reporter = resolvelib.BaseReporter()
rslvr = resolvelib.Resolver(provider, reporter)

result = rslvr.resolve([Requirement("hydra-core==2.0.0a1")])
assert "hydra-core" in result.mapping

candidate = result.mapping["hydra-core"]
assert (
candidate.url
== "https://files.pythonhosted.org/packages/c6/50/e0edd38dcd63fb26a8547f13d28f7a008bc4a3fd4eb4ff030673f22ad41a/hydra_core-2.0.0a1-py3-none-any.whl"
)
assert str(candidate.version) == "2.0.0a1"


def test_provider_choose_sdist():
with requests_mock.Mocker() as r:
r.get(
Expand Down

0 comments on commit c36bb78

Please sign in to comment.