Switch PyVer to use packaging.version exclusively.
This commit is contained in:
parent
624edfc3ea
commit
338d99091b
5 changed files with 59 additions and 53 deletions
|
@ -84,7 +84,6 @@ class DependencyProviderBase(ABC):
|
|||
self.context_wheel = self.context.copy()
|
||||
self.context_wheel['extra'] = None
|
||||
self.py_ver = py_ver
|
||||
self.py_ver_parsed = parse_ver(py_ver.python_full_version())
|
||||
self.py_ver_digits = py_ver.digits()
|
||||
self.platform = platform
|
||||
self.system = system
|
||||
|
@ -292,8 +291,8 @@ class WheelDependencyProvider(DependencyProviderBase):
|
|||
def __init__(self, data_dir: str, *args, **kwargs):
|
||||
super(WheelDependencyProvider, self).__init__(*args, **kwargs)
|
||||
self.data = LazyBucketDict(data_dir)
|
||||
maj = self.py_ver_digits[0] # major version
|
||||
min = self.py_ver_digits[1] # minor version
|
||||
maj = self.py_ver.version.release[0] # major version
|
||||
min = self.py_ver.version.release[1] # minor version
|
||||
cp_abi = f"cp{maj}{min}mu" if int(maj) == 2 else f"cp{maj}{min}m?"
|
||||
if self.system == "linux":
|
||||
self.preferred_wheels = (
|
||||
|
@ -402,7 +401,7 @@ class WheelDependencyProvider(DependencyProviderBase):
|
|||
def _python_requires_ok(self, wheel: WheelRelease):
|
||||
if not wheel.requires_python:
|
||||
return True
|
||||
ver = parse_ver(str(self.py_ver))
|
||||
ver = self.py_ver.version
|
||||
try:
|
||||
parsed_py_requires = list(parse_reqs(f"python{wheel.requires_python}"))
|
||||
return bool(filter_versions([ver], parsed_py_requires[0]))
|
||||
|
@ -441,7 +440,7 @@ class SdistDependencyProvider(DependencyProviderBase):
|
|||
if 'python_requires' in pkg_data:
|
||||
specs = ",".join(pkg_data['python_requires'])
|
||||
parsed_py_requires = list(parse_reqs(f"python{specs}"))
|
||||
if not filter_versions([self.py_ver_parsed], parsed_py_requires[0]):
|
||||
if not filter_versions([self.py_ver.version], parsed_py_requires[0]):
|
||||
continue
|
||||
parsed_ver = parse_ver(ver)
|
||||
candidates[parsed_ver] = pkg_data
|
||||
|
@ -639,7 +638,7 @@ class CondaDependencyProvider(DependencyProviderBase):
|
|||
return False
|
||||
if dep.startswith("python "):
|
||||
req = next(iter(parse_reqs([dep])))
|
||||
if not filter_versions([self.py_ver_parsed], req):
|
||||
if not filter_versions([self.py_ver.version], req):
|
||||
return False
|
||||
return True
|
||||
|
||||
|
|
|
@ -163,7 +163,15 @@ def parse_reqs_line(line):
|
|||
all_specs_raw = all_specs.split('|')
|
||||
all_specs = []
|
||||
for specs in all_specs_raw:
|
||||
all_specs.append(SpecifierSet(specs))
|
||||
parts = specs.split(',')
|
||||
parsed_parts = []
|
||||
for part in parts:
|
||||
if not re.search(r"==|!=|>=|<=|>|<|~=|=", part):
|
||||
part = '==' + part
|
||||
elif re.fullmatch(r"=\d(\d|\.|\*|[a-z])*", part):
|
||||
part = '=' + part
|
||||
parsed_parts.append(part)
|
||||
all_specs.append(SpecifierSet(",".join(parsed_parts)))
|
||||
|
||||
all_specs = tuple(all_specs)
|
||||
|
||||
|
|
|
@ -76,7 +76,7 @@ def env(args, nixpkgs_ref):
|
|||
url = "https://github.com/DavHau/mach-nix/tarball/${{lock.mach-nix.rev}}";
|
||||
sha256 = lock.mach-nix.sha256;
|
||||
}}) {{
|
||||
python = "python{py_ver.digits()}";
|
||||
python = "{py_ver.nix()}";
|
||||
inherit pkgs;
|
||||
}};
|
||||
}}
|
||||
|
|
|
@ -12,49 +12,49 @@ from mach_nix.requirements import parse_reqs_line
|
|||
@pytest.mark.parametrize("input, exp_output", [
|
||||
|
||||
('requests', ('requests', (), None, None, None))
|
||||
, ('requests[socks] ==2.24.0', ('requests', ('socks',), ((('==', '2.24.0'),),), None, None))
|
||||
, ('requests[socks,test] 2.24.0', ('requests', ('socks', 'test'), ((('==', '2.24.0'),),), None, None))
|
||||
, ('python >=2.7,<2.8.0a0', ('python', (), ((('>=', '2.7'), ('<', '2.8.0a0')),), None, None))
|
||||
, ('requests == 2.24.0', ('requests', (), ((('==', '2.24.0'),),), None, None))
|
||||
, ('pdfminer.six == 20200726', ('pdfminer.six', (), ((('==', '20200726'),),), None, None))
|
||||
, ('python>= 3.5', ('python', (), ((('>=', '3.5'),),), None, None))
|
||||
, ('python >=3.5', ('python', (), ((('>=', '3.5'),),), None, None))
|
||||
, ('python >=2.6, !=3.0.*', ('python', (), ((('>=', '2.6'), ('!=', '3.0.*')),), None, None))
|
||||
, ('requests[socks] ==2.24.0', ('requests', ('socks',), (SpecifierSet('==2.24.0'),), None, None))
|
||||
, ('requests[socks,test] 2.24.0', ('requests', ('socks', 'test'), (SpecifierSet('==2.24.0'),), None, None))
|
||||
, ('python >=2.7,<2.8.0a0', ('python', (), (SpecifierSet('>=2.7,<2.8.0a0'),), None, None))
|
||||
, ('requests == 2.24.0', ('requests', (), (SpecifierSet('==2.24.0'),), None, None))
|
||||
, ('pdfminer.six == 20200726', ('pdfminer.six', (), (SpecifierSet('==20200726'),), None, None))
|
||||
, ('python>= 3.5', ('python', (), (SpecifierSet('>=3.5'),), None, None))
|
||||
, ('python >=3.5', ('python', (), (SpecifierSet('>=3.5'),), None, None))
|
||||
, ('python >=2.6, !=3.0.*', ('python', (), (SpecifierSet('>=2.6,!=3.0.*'),), None, None))
|
||||
, ("unittest2 >=2.0,<3.0 ; python_version == '2.4' or python_version == '2.5'",
|
||||
('unittest2', (), ((('>=', '2.0'), ('<', '3.0')),), None, "python_version == '2.4' or python_version == '2.5'"))
|
||||
, ("pywin32 > 1.0 ; sys.platform == 'win32'", ('pywin32', (), ((('>', '1.0'),),), None, "sys.platform == 'win32'"))
|
||||
('unittest2', (), (SpecifierSet('>=2.0,<3.0'),), None, "python_version == '2.4' or python_version == '2.5'"))
|
||||
, ("pywin32 > 1.0 ; sys.platform == 'win32'", ('pywin32', (), (SpecifierSet('>1.0'),), None, "sys.platform == 'win32'"))
|
||||
, ("certifi (==2016.9.26) ; extra == 'certs'",
|
||||
('certifi', ('certs',), ((('==', '2016.9.26'),),), None, "extra == 'certs'"))
|
||||
('certifi', ('certs',), (SpecifierSet('==2016.9.26'),), None, "extra == 'certs'"))
|
||||
, ("sphinx ; extra == 'docs'", ('sphinx', ('docs',), None, None, "extra == 'docs'"))
|
||||
, ('requests 2.24.0', ('requests', (), ((('==', '2.24.0'),),), None, None))
|
||||
, ('requests 2.24.0', ('requests', (), ((('==', '2.24.0'),),), None, None))
|
||||
, ('requests 2.24.0', ('requests', (), ((('==', '2.24.0'),),), None, None))
|
||||
, ('requests 2.24.0', ('requests', (), ((('==', '2.24.0'),),), None, None))
|
||||
, ('requests 2.24.0', ('requests', (), (SpecifierSet('==2.24.0'),), None, None))
|
||||
, ('requests 2.24.0', ('requests', (), (SpecifierSet('==2.24.0'),), None, None))
|
||||
, ('requests 2.24.0', ('requests', (), (SpecifierSet('==2.24.0'),), None, None))
|
||||
, ('requests 2.24.0', ('requests', (), (SpecifierSet('==2.24.0'),), None, None))
|
||||
, ('hdf5 >=1.10.5,<1.10.6.0a0 mpi_mpich_*',
|
||||
('hdf5', (), ((('>=', '1.10.5'), ('<', '1.10.6.0a0')),), 'mpi_mpich_*', None))
|
||||
, ('blas 1.* openblas', ('blas', (), ((('==', '1.*'),),), 'openblas', None))
|
||||
, ('blas * openblas', ('blas', (), ((('==', '*'),),), 'openblas', None))
|
||||
, ('blas 1.1 openblas', ('blas', (), ((('==', '1.1'),),), 'openblas', None))
|
||||
, ('requests >=2.24.0 build123*', ('requests', (), ((('>=', '2.24.0'),),), 'build123*', None))
|
||||
, ('requests ==2.24.* build123*', ('requests', (), ((('==', '2.24.*'),),), 'build123*', None))
|
||||
, ('requests 2.24.* build123*', ('requests', (), ((('==', '2.24.*'),),), 'build123*', None))
|
||||
, ('requests 2.24.0 build123*', ('requests', (), ((('==', '2.24.0'),),), 'build123*', None))
|
||||
, ('requests 2.24.0 *bla', ('requests', (), ((('==', '2.24.0'),),), '*bla', None))
|
||||
, ('requests 2.24.0 *', ('requests', (), ((('==', '2.24.0'),),), '*', None))
|
||||
, ('requests * *bla', ('requests', (), ((('==', '*'),),), '*bla', None))
|
||||
, ('requests * *', ('requests', (), ((('==', '*'),),), '*', None))
|
||||
, ('requests 2.24.0 build123*', ('requests', (), ((('==', '2.24.0'),),), 'build123*', None))
|
||||
, ('requests 2.24.0 build123*', ('requests', (), ((('==', '2.24.0'),),), 'build123*', None))
|
||||
, ('requests 2.24.0 build123*', ('requests', (), ((('==', '2.24.0'),),), 'build123*', None))
|
||||
('hdf5', (), (SpecifierSet('>=1.10.5,<1.10.6.0a0'),), 'mpi_mpich_*', None))
|
||||
, ('blas 1.* openblas', ('blas', (), (SpecifierSet('==1.*'),), 'openblas', None))
|
||||
, ('blas * openblas', ('blas', (), (SpecifierSet('==*'),), 'openblas', None))
|
||||
, ('blas 1.1 openblas', ('blas', (), (SpecifierSet('==1.1'),), 'openblas', None))
|
||||
, ('requests >=2.24.0 build123*', ('requests', (), (SpecifierSet('>=2.24.0'),), 'build123*', None))
|
||||
, ('requests ==2.24.* build123*', ('requests', (), (SpecifierSet('==2.24.*'),), 'build123*', None))
|
||||
, ('requests 2.24.* build123*', ('requests', (), (SpecifierSet('==2.24.*'),), 'build123*', None))
|
||||
, ('requests 2.24.0 build123*', ('requests', (), (SpecifierSet('==2.24.0'),), 'build123*', None))
|
||||
, ('requests 2.24.0 *bla', ('requests', (), (SpecifierSet('==2.24.0'),), '*bla', None))
|
||||
, ('requests 2.24.0 *', ('requests', (), (SpecifierSet('==2.24.0'),), '*', None))
|
||||
, ('requests * *bla', ('requests', (), (SpecifierSet('==*'),), '*bla', None))
|
||||
, ('requests * *', ('requests', (), (SpecifierSet('==*'),), '*', None))
|
||||
, ('requests 2.24.0 build123*', ('requests', (), (SpecifierSet('==2.24.0'),), 'build123*', None))
|
||||
, ('requests 2.24.0 build123*', ('requests', (), (SpecifierSet('==2.24.0'),), 'build123*', None))
|
||||
, ('requests 2.24.0 build123*', ('requests', (), (SpecifierSet('==2.24.0'),), 'build123*', None))
|
||||
, ('ruamel.yaml >=0.12.4,<0.16|0.16.5.*',
|
||||
('ruamel.yaml', (), ((('>=', '0.12.4'), ('<', '0.16')), (('==', '0.16.5.*'),)), None, None))
|
||||
, ('openjdk =8|11', ('openjdk', (), ((('==', '8'),), (('==', '11'),)), None, None))
|
||||
, ('python 3.6.9 ab_73_pypy', ('python', (), ((('==', '3.6.9'),),), 'ab_73_pypy', None))
|
||||
, ('gitpython >=3.0.8,3.0.*', ('gitpython', (), ((('>=', '3.0.8'), ('==', '3.0.*')),), None, None))
|
||||
('ruamel.yaml', (), (SpecifierSet('>=0.12.4,<0.16'), SpecifierSet('==0.16.5.*')), None, None))
|
||||
, ('openjdk =8|11', ('openjdk', (), (SpecifierSet('==8'), SpecifierSet('==11')), None, None))
|
||||
, ('python 3.6.9 ab_73_pypy', ('python', (), (SpecifierSet('==3.6.9'),), 'ab_73_pypy', None))
|
||||
, ('gitpython >=3.0.8,3.0.*', ('gitpython', (), (SpecifierSet('>=3.0.8,==3.0.*'),), None, None))
|
||||
, ("zest.releaser[recommended] ; extra == 'maintainer'",
|
||||
('zest.releaser', ('recommended', 'maintainer'), None, None, "extra == 'maintainer'"))
|
||||
, ('pytz (>dev)', ('pytz', (), (), None, None))
|
||||
, ('libcurl 7.71.1 h20c2e04_1', ('libcurl', (), ((('==', '7.71.1'),),), 'h20c2e04_1', None))
|
||||
, ('libcurl 7.71.1 h20c2e04_1', ('libcurl', (), (SpecifierSet('==7.71.1'),), 'h20c2e04_1', None))
|
||||
, ('ixmp ==0.1.3 1', ('ixmp', (), (SpecifierSet('==0.1.3',),), '1', None))
|
||||
])
|
||||
def test_parse_requirements(input, exp_output):
|
||||
|
|
|
@ -3,31 +3,30 @@ import traceback
|
|||
|
||||
import packaging.version
|
||||
from packaging.version import parse as parse_ver, Version
|
||||
from conda.models.version import VersionOrder
|
||||
|
||||
__all__ = ['parse_ver', 'Version', 'PyVer']
|
||||
|
||||
class PyVer(VersionOrder):
|
||||
|
||||
class PyVer:
|
||||
def __init__(self, vstr):
|
||||
self.pypa_ver = packaging.version.Version(vstr)
|
||||
super(PyVer, self).__init__(vstr)
|
||||
self.version = packaging.version.Version(vstr)
|
||||
|
||||
def nix(self):
|
||||
res = 'python'
|
||||
res += str(self.pypa_ver.release[0])
|
||||
if len(self.pypa_ver.release) >= 2:
|
||||
res += str(self.pypa_ver.release[1])
|
||||
res += str(self.version.release[0])
|
||||
if len(self.version.release) >= 2:
|
||||
res += str(self.version.release[1])
|
||||
return res
|
||||
|
||||
def digits(self):
|
||||
return ''.join(filter(lambda c: c.isdigit(), str(self.pypa_ver)))[:2]
|
||||
return ''.join(map(str, self.version.release[:2]))
|
||||
|
||||
def python_version(self):
|
||||
return f"{self.pypa_ver.release[0]}.{self.pypa_ver.release[1]}"
|
||||
return f"{self.version.release[0]}.{self.version.release[1]}"
|
||||
|
||||
def python_full_version(self):
|
||||
try:
|
||||
return f"{self.pypa_ver.release[0]}.{self.pypa_ver.release[1]}.{self.pypa_ver.release[2]}"
|
||||
return f"{self.version.release[0]}.{self.version.release[1]}.{self.version.release[2]}"
|
||||
except IndexError:
|
||||
traceback.print_exc()
|
||||
print("Error: please specify full python version including bugfix version (like 3.7.5)", file=sys.stderr)
|
||||
|
|
Loading…
Reference in a new issue