Skip to content

Commit

Permalink
fix: match python_version with wildcards (e.g. "2.*")
Browse files Browse the repository at this point in the history
  • Loading branch information
Konstantin Yegupov committed Aug 27, 2019
1 parent 9164d0b commit 8edf642
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 4 deletions.
4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@
"format:check": "prettier --check '{lib,test}/**/*.{js,ts}'",
"format": "prettier --write '{lib,test}/**/*.{js,ts}'",
"prepare": "npm run build",
"test": "cross-env TS_NODE_PROJECT=tsconfig-test.json tap --node-arg=-r --node-arg=ts-node/register ./test/*.test.{js,ts} -R spec --timeout=900",
"test": "npm run test:pysrc && npm run test:js",
"test:js": "cross-env TS_NODE_PROJECT=tsconfig-test.json tap --node-arg=-r --node-arg=ts-node/register ./test/*.test.{js,ts} -R spec --timeout=900",
"test:pysrc": "python -m unittest discover pysrc",
"lint": "npm run build-tests && npm run format:check && eslint --cache '{lib,test}/**/*.{js,ts}'",
"semantic-release": "semantic-release"
},
Expand Down
13 changes: 10 additions & 3 deletions pysrc/pip_resolve.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ def create_package_as_root(package, dir_as_root):
dir_as_root[DEPENDENCIES][package_as_root[NAME]] = package_tree
return dir_as_root

def satisfies_python_requirement(parsed_operator, parsed_python_version):
def satisfies_python_requirement(parsed_operator, py_version_str, sys=sys):
# TODO: use python semver library to compare versions
operator_func = {
">": gt,
Expand All @@ -133,8 +133,15 @@ def satisfies_python_requirement(parsed_operator, parsed_python_version):
">=": ge,
'!=': ne,
}[parsed_operator]
system_python = str(sys.version_info[0]) + '.' + str(sys.version_info[1])
return operator_func(float(system_python), float(parsed_python_version))
system_py_version_tuple = (sys.version_info[0], sys.version_info[1])
py_version_tuple = tuple(py_version_str.split('.')) # string tuple
if py_version_tuple[-1] == '*':
system_py_version_tuple = system_py_version_tuple[0]
py_version_tuple = int(py_version_tuple[0]) # int tuple
else:
py_version_tuple = tuple(int(x) for x in py_version_tuple) # int tuple

return operator_func(system_py_version_tuple, py_version_tuple)

def get_markers_text(requirement):
if isinstance(requirement, pipfile.PipfileRequirement):
Expand Down
24 changes: 24 additions & 0 deletions pysrc/test_pip_resolve.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# run with:
# cd pysrc; python3 pip_resolve_test.py; cd ..

from pip_resolve import satisfies_python_requirement
from collections import namedtuple

import unittest

fake_sys = namedtuple('Sys', ['version_info'])

class TestStringMethods(unittest.TestCase):

def test(self):
self.assertTrue(satisfies_python_requirement('>', '2.4', sys=fake_sys((2, 5))))
self.assertTrue(satisfies_python_requirement('==', '2.3', sys=fake_sys((2, 3))))
self.assertTrue(satisfies_python_requirement('<=', '2.3', sys=fake_sys((2, 3))))
self.assertFalse(satisfies_python_requirement('<', '2.3', sys=fake_sys((2, 3))))
self.assertTrue(satisfies_python_requirement('>', '3.1', sys=fake_sys((3, 5))))
self.assertFalse(satisfies_python_requirement('>', '3.1', sys=fake_sys((2, 8))))
self.assertTrue(satisfies_python_requirement('==', '2.*', sys=fake_sys((2, 6))))
self.assertTrue(satisfies_python_requirement('==', '3.*', sys=fake_sys((3, 6))))

if __name__ == '__main__':
unittest.main()

0 comments on commit 8edf642

Please sign in to comment.