Skip to content

Commit d08f968

Browse files
authored
Merge pull request #9575 from hexagonrecursion/test-sort-order
2 parents b601497 + e96791f commit d08f968

File tree

3 files changed

+48
-4
lines changed

3 files changed

+48
-4
lines changed

news/9565.bugfix.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Make wheel compatibility tag preferences more important than the build tag

src/pip/_internal/index/package_finder.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444

4545
BuildTag = Union[Tuple[()], Tuple[int, str]]
4646
CandidateSortingKey = (
47-
Tuple[int, int, int, _BaseVersion, BuildTag, Optional[int]]
47+
Tuple[int, int, int, _BaseVersion, Optional[int], BuildTag]
4848
)
4949

5050

@@ -530,7 +530,7 @@ def _sort_key(self, candidate):
530530
yank_value = -1 * int(link.is_yanked) # -1 for yanked.
531531
return (
532532
has_allowed_hash, yank_value, binary_preference, candidate.version,
533-
build_tag, pri,
533+
pri, build_tag,
534534
)
535535

536536
def sort_best_candidate(

tests/unit/test_finder.py

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,8 @@ def test_existing_over_wheel_priority(self, data):
209209
with pytest.raises(BestVersionAlreadyInstalled):
210210
finder.find_requirement(req, True)
211211

212+
213+
class TestCandidateEvaluator:
212214
def test_link_sorting(self):
213215
"""
214216
Test link sorting
@@ -249,7 +251,8 @@ def test_link_sorting(self):
249251
results = sorted(links, key=sort_key, reverse=True)
250252
results2 = sorted(reversed(links), key=sort_key, reverse=True)
251253

252-
assert links == results == results2, results2
254+
assert links == results, results
255+
assert links == results2, results2
253256

254257
def test_link_sorting_wheels_with_build_tags(self):
255258
"""Verify build tags affect sorting."""
@@ -274,7 +277,47 @@ def test_link_sorting_wheels_with_build_tags(self):
274277
sort_key = candidate_evaluator._sort_key
275278
results = sorted(links, key=sort_key, reverse=True)
276279
results2 = sorted(reversed(links), key=sort_key, reverse=True)
277-
assert links == results == results2, results2
280+
281+
assert links == results, results
282+
assert links == results2, results2
283+
284+
def test_build_tag_is_less_important_than_other_tags(self):
285+
links = [
286+
InstallationCandidate(
287+
"simple",
288+
"1.0",
289+
Link('simple-1.0-1-py3-abi3-linux_x86_64.whl'),
290+
),
291+
InstallationCandidate(
292+
"simple",
293+
'1.0',
294+
Link('simple-1.0-2-py3-abi3-linux_i386.whl'),
295+
),
296+
InstallationCandidate(
297+
"simple",
298+
'1.0',
299+
Link('simple-1.0-2-py3-any-none.whl'),
300+
),
301+
InstallationCandidate(
302+
"simple",
303+
'1.0',
304+
Link('simple-1.0.tar.gz'),
305+
),
306+
]
307+
valid_tags = [
308+
Tag('py3', 'abi3', 'linux_x86_64'),
309+
Tag('py3', 'abi3', 'linux_i386'),
310+
Tag('py3', 'any', 'none'),
311+
]
312+
evaluator = CandidateEvaluator(
313+
'my-project', supported_tags=valid_tags, specifier=SpecifierSet(),
314+
)
315+
sort_key = evaluator._sort_key
316+
results = sorted(links, key=sort_key, reverse=True)
317+
results2 = sorted(reversed(links), key=sort_key, reverse=True)
318+
319+
assert links == results, results
320+
assert links == results2, results2
278321

279322

280323
def test_finder_priority_file_over_page(data):

0 commit comments

Comments
 (0)