Skip to content

Commit 117ee7e

Browse files
fix: add support for dev/alpha/beta/rc python versions (#235)
1 parent e8a7063 commit 117ee7e

File tree

3 files changed

+42
-7
lines changed

3 files changed

+42
-7
lines changed

pysrc/pip_resolve.py

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -171,25 +171,45 @@ def create_package_as_root(package):
171171
return dir_as_root
172172

173173

174-
def satisfies_python_requirement(parsed_operator, py_version_str):
174+
def satisfies_python_requirement(parsed_operator, py_version):
175+
"""Check if a package required python versions matches the one of the system
176+
177+
Args:
178+
parsed_operator (str): operator to compare by i.e. >, <=, ==
179+
py_version (str): The python version that is required by the package
180+
181+
Returns:
182+
bool: True if the version matches, False otherwise
183+
"""
175184
# TODO: use python semver library to compare versions
176-
operator_func = {
185+
operator = {
177186
">": gt,
178187
"==": eq,
179188
"<": lt,
180189
"<=": le,
181190
">=": ge,
182191
'!=': ne,
183-
}[parsed_operator]
192+
}
193+
operator_func = operator.get(parsed_operator)
184194
system_py_version_tuple = (sys.version_info[0], sys.version_info[1])
185-
py_version_tuple = tuple(py_version_str.split('.')) # string tuple
195+
py_version_tuple = tuple(py_version.split('.')) # tuple of strings
196+
197+
# For wildcard versions like 3.9.*
186198
if py_version_tuple[-1] == '*':
187199
system_py_version_tuple = system_py_version_tuple[0]
188-
py_version_tuple = int(py_version_tuple[0]) # int tuple
200+
py_version_tuple = int(py_version_tuple[0]) # tuple of integers
201+
202+
# For dev/alpha/beta/rc versions like 3.9.dev0
203+
elif not py_version_tuple[-1].isdigit():
204+
py_version_tuple = (int(py_version_tuple[0]), int(py_version_tuple[1]))
205+
206+
# For stable releases like 3.9.2
189207
else:
190-
py_version_tuple = tuple(int(x) for x in py_version_tuple) # int tuple
208+
py_version_tuple = tuple(int(x) for x in py_version_tuple)
209+
210+
result = operator_func(system_py_version_tuple, py_version_tuple)
191211

192-
return operator_func(system_py_version_tuple, py_version_tuple)
212+
return result
193213

194214

195215
def get_markers_text(requirement):

test/system/inspect.spec.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,20 @@ describe('inspect', () => {
274274
},
275275
],
276276
},
277+
{
278+
workspace: 'pip-app-dev-alpha-beta-python-version',
279+
uninstallPackages: [],
280+
pluginOpts: {},
281+
expected: [
282+
{
283+
pkg: {
284+
name: 'requests',
285+
version: '2.31.0',
286+
},
287+
directDeps: ['requests'],
288+
},
289+
],
290+
},
277291
])(
278292
'should get a valid dependency graph for workspace = $workspace',
279293
async ({ workspace, uninstallPackages, pluginOpts, expected }) => {
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
requests==2.31.0 ; python_version >= "3.8.dev0"

0 commit comments

Comments
 (0)