File: 201.patch

package info (click to toggle)
python-resolvelib 1.2.1-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 16,564 kB
  • sloc: python: 2,467; javascript: 102; sh: 9; makefile: 3
file content (56 lines) | stat: -rw-r--r-- 2,208 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
From 5629c5fe8878e30af371bf7a23a73007d5397ac2 Mon Sep 17 00:00:00 2001
From: Damian Shaw <damian.peter.shaw@gmail.com>
Date: Wed, 11 Feb 2026 23:26:14 -0500
Subject: [PATCH] Correct `PythonInputProvider._iter_matches` to fix tests with
 packaging 26.0

---
 .../python/test_resolvers_python.py           | 25 ++++++++++++++-----
 1 file changed, 19 insertions(+), 6 deletions(-)

diff --git a/tests/functional/python/test_resolvers_python.py b/tests/functional/python/test_resolvers_python.py
index eafb1cb..c44b777 100644
--- a/tests/functional/python/test_resolvers_python.py
+++ b/tests/functional/python/test_resolvers_python.py
@@ -3,9 +3,11 @@
 import operator
 import os
 from collections import defaultdict
+from functools import reduce
 
 import packaging.markers
 import packaging.requirements
+import packaging.specifiers
 import packaging.utils
 import packaging.version
 import pytest
@@ -92,12 +94,23 @@ def _iter_matches(self, identifier, requirements, incompatibilities):
         name, _, _ = identifier.partition("[")
         bad_versions = {c.version for c in incompatibilities[identifier]}
         extras = {e for r in requirements[identifier] for e in r.extras}
-        for key in self.index[name]:
-            v = packaging.version.parse(key)
-            if any(v not in r.specifier for r in requirements[identifier]):
-                continue
-            if v in bad_versions:
-                continue
+
+        # Get all versions from the index, excluding bad versions
+        available_versions = (
+            v
+            for key in self.index[name]
+            if (v := packaging.version.parse(key)) not in bad_versions
+        )
+
+        # Combine all requirement specifiers using & operator
+        combined_specifier = reduce(
+            operator.and_,
+            map(operator.attrgetter("specifier"), requirements[identifier]),
+            packaging.specifiers.SpecifierSet(),
+        )
+
+        # Filter versions using the combined specifier
+        for v in combined_specifier.filter(available_versions):
             yield Candidate(name=name, version=v, extras=extras)
 
     def find_matches(self, identifier, requirements, incompatibilities):