Commit af3b46d7 by Sébastien Eustace

Fixed handling of markers with the in operator

parent 9ecb7579
...@@ -6,12 +6,15 @@ ...@@ -6,12 +6,15 @@
- Added compatibility with Python 3.4 and 3.5. - Added compatibility with Python 3.4 and 3.5.
### Changed ### Changed
- Improved dependency resolution to avoid unnecessary operations. - Improved dependency resolution to avoid unnecessary operations.
- Improved dependency resolution speed. - Improved dependency resolution speed.
### Fixed
- Fixed handling of markers with the `in` operator.
## [0.6.5] - 2018-03-22 ## [0.6.5] - 2018-03-22
......
...@@ -98,6 +98,22 @@ def dependency_from_pep_508(name): ...@@ -98,6 +98,22 @@ def dependency_from_pep_508(name):
op = '' op = ''
elif op == '!=': elif op == '!=':
version += '.*' version += '.*'
elif op == 'in':
versions = []
for v in version.split(' '):
split = v.split('.')
if len(split) in [1, 2]:
split.append('*')
op = ''
else:
op = '=='
versions.append(op + '.'.join(split))
if versions:
ands.append(' || '.join(versions))
continue
ands.append('{}{}'.format(op, version)) ands.append('{}{}'.format(op, version))
...@@ -112,6 +128,15 @@ def dependency_from_pep_508(name): ...@@ -112,6 +128,15 @@ def dependency_from_pep_508(name):
for op, platform in or_: for op, platform in or_:
if op == '==': if op == '==':
op = '' op = ''
elif op == 'in':
platforms = []
for v in platform.split(' '):
platforms.append(v)
if platforms:
ands.append(' || '.join(platforms))
continue
ands.append('{}{}'.format(op, platform)) ands.append('{}{}'.format(op, platform))
......
...@@ -96,3 +96,27 @@ def test_dependency_from_pep_508_complex(): ...@@ -96,3 +96,27 @@ def test_dependency_from_pep_508_complex():
assert dep.extras == ['foo'] assert dep.extras == ['foo']
assert dep.python_versions == '>=2.7 !=3.2.*' assert dep.python_versions == '>=2.7 !=3.2.*'
assert dep.platform == 'win32 || darwin' assert dep.platform == 'win32 || darwin'
def test_dependency_python_version_in():
name = (
'requests (==2.18.0); '
'python_version in \'3.3 3.4 3.5\''
)
dep = dependency_from_pep_508(name)
assert dep.name == 'requests'
assert str(dep.constraint) == '== 2.18.0.0'
assert dep.python_versions == '3.3.* || 3.4.* || 3.5.*'
def test_dependency_platform_in():
name = (
'requests (==2.18.0); '
'sys_platform in \'win32 darwin\''
)
dep = dependency_from_pep_508(name)
assert dep.name == 'requests'
assert str(dep.constraint) == '== 2.18.0.0'
assert dep.platform == 'win32 || darwin'
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment