@@ -171,25 +171,45 @@ def create_package_as_root(package):
171
171
return dir_as_root
172
172
173
173
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
+ """
175
184
# TODO: use python semver library to compare versions
176
- operator_func = {
185
+ operator = {
177
186
">" : gt ,
178
187
"==" : eq ,
179
188
"<" : lt ,
180
189
"<=" : le ,
181
190
">=" : ge ,
182
191
'!=' : ne ,
183
- }[parsed_operator ]
192
+ }
193
+ operator_func = operator .get (parsed_operator )
184
194
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.*
186
198
if py_version_tuple [- 1 ] == '*' :
187
199
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
189
207
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 )
191
211
192
- return operator_func ( system_py_version_tuple , py_version_tuple )
212
+ return result
193
213
194
214
195
215
def get_markers_text (requirement ):
0 commit comments