File: pip23-compatability-finder.patch

package info (click to toggle)
pipenv 2024.0.1%2Bds-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 18,568 kB
  • sloc: python: 187,163; makefile: 191; javascript: 133; sh: 64
file content (114 lines) | stat: -rw-r--r-- 5,302 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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
diff --git a/pipenv/patched/pip/_internal/index/package_finder.py b/pipenv/patched/pip/_internal/index/package_finder.py
index ec9ebc367..40a6c8182 100644
--- a/pipenv/patched/pip/_internal/index/package_finder.py
+++ b/pipenv/patched/pip/_internal/index/package_finder.py
@@ -125,6 +125,7 @@ class LinkEvaluator:
         target_python: TargetPython,
         allow_yanked: bool,
         ignore_requires_python: Optional[bool] = None,
+        ignore_compatibility: Optional[bool] = None,
     ) -> None:
         """
         :param project_name: The user supplied package name.
@@ -142,6 +143,8 @@ class LinkEvaluator:
         :param ignore_requires_python: Whether to ignore incompatible
             PEP 503 "data-requires-python" values in HTML links. Defaults
             to False.
+        :param ignore_compatibility: Whether to ignore
+            compatibility of python versions and allow all versions of packages.
         """
         if ignore_requires_python is None:
             ignore_requires_python = False
@@ -151,6 +154,7 @@ class LinkEvaluator:
         self._ignore_requires_python = ignore_requires_python
         self._formats = formats
         self._target_python = target_python
+        self._ignore_compatibility = ignore_compatibility

         self.project_name = project_name

@@ -181,10 +185,10 @@ class LinkEvaluator:
                     LinkType.format_unsupported,
                     f"unsupported archive format: {ext}",
                 )
-            if "binary" not in self._formats and ext == WHEEL_EXTENSION:
+            if "binary" not in self._formats and ext == WHEEL_EXTENSION and not self._ignore_compatibility:
                 reason = f"No binaries permitted for {self.project_name}"
                 return (LinkType.format_unsupported, reason)
-            if "macosx10" in link.path and ext == ".zip":
+            if "macosx10" in link.path and ext == ".zip" and not self._ignore_compatibility:
                 return (LinkType.format_unsupported, "macosx10 one")
             if ext == WHEEL_EXTENSION:
                 try:
@@ -199,7 +203,7 @@ class LinkEvaluator:
                     return (LinkType.different_project, reason)

                 supported_tags = self._target_python.get_unsorted_tags()
-                if not wheel.supported(supported_tags):
+                if not wheel.supported(supported_tags) and not self._ignore_compatibility:
                     # Include the wheel's tags in the reason string to
                     # simplify troubleshooting compatibility issues.
                     file_tags = ", ".join(wheel.get_formatted_file_tags())
@@ -240,7 +244,7 @@ class LinkEvaluator:
             version_info=self._target_python.py_version_info,
             ignore_requires_python=self._ignore_requires_python,
         )
-        if not supports_python:
+        if not supports_python and not self._ignore_compatibility:
             reason = f"{version} Requires-Python {link.requires_python}"
             return (LinkType.requires_python_mismatch, reason)

@@ -487,7 +491,11 @@ class CandidateEvaluator:

         return sorted(filtered_applicable_candidates, key=self._sort_key)

-    def _sort_key(self, candidate: InstallationCandidate) -> CandidateSortingKey:
+    def _sort_key(
+        self,
+        candidate: InstallationCandidate,
+        ignore_compatibility: bool = True,
+    ) -> CandidateSortingKey:
         """
         Function to pass as the `key` argument to a call to sorted() to sort
         InstallationCandidates by preference.
@@ -532,10 +540,12 @@ class CandidateEvaluator:
                     )
                 )
             except ValueError:
-                raise UnsupportedWheel(
-                    f"{wheel.filename} is not a supported wheel for this platform. It "
-                    "can't be sorted."
-                )
+                if not ignore_compatibility:
+                    raise UnsupportedWheel(
+                        f"{wheel.filename} is not a supported wheel for this platform. It "
+                        "can't be sorted."
+                    )
+                pri = -support_num
             if self._prefer_binary:
                 binary_preference = 1
             if wheel.build_tag is not None:
@@ -602,6 +612,7 @@ class PackageFinder:
         format_control: Optional[FormatControl] = None,
         candidate_prefs: Optional[CandidatePreferences] = None,
         ignore_requires_python: Optional[bool] = None,
+        ignore_compatibility: Optional[bool] = False,
     ) -> None:
         """
         This constructor is primarily meant to be used by the create() class
@@ -623,6 +634,7 @@ class PackageFinder:
         self._ignore_requires_python = ignore_requires_python
         self._link_collector = link_collector
         self._target_python = target_python
+        self._ignore_compatibility = ignore_compatibility

         self.format_control = format_control

@@ -723,6 +735,7 @@ class PackageFinder:
             target_python=self._target_python,
             allow_yanked=self._allow_yanked,
             ignore_requires_python=self._ignore_requires_python,
+            ignore_compatibility=self._ignore_compatibility,
         )

     def _sort_links(self, links: Iterable[Link]) -> List[Link]: