Commit 97597ba6 by Sébastien Eustace

Fix generated setup.py in sdist (install_requires and extras)

parent 09fae426
...@@ -12,6 +12,11 @@ ...@@ -12,6 +12,11 @@
- Improved dependency resolution time by using cache control. - Improved dependency resolution time by using cache control.
### Fixed
- Fixed `install_requires` and `extras` in generated sdist.
## [0.7.1] - 2018-04-05 ## [0.7.1] - 2018-04-05
### Fixed ### Fixed
......
from __future__ import unicode_literals from __future__ import unicode_literals
import os import os
import re
import tarfile import tarfile
from collections import defaultdict from collections import defaultdict
...@@ -227,18 +228,49 @@ class SdistBuilder(Builder): ...@@ -227,18 +228,49 @@ class SdistBuilder(Builder):
): ):
main = [] main = []
extras = defaultdict(list) extras = defaultdict(list)
req_regex = re.compile('^(.+) \((.+)\)$')
for dependency in dependencies: for dependency in dependencies:
if dependency.is_optional(): if dependency.is_optional():
for extra_name, reqs in package.extras.items(): for extra_name, reqs in package.extras.items():
for req in reqs: for req in reqs:
if req.name == dependency.name: if req.name == dependency.name:
extras[extra_name].append( requirement = dependency.to_pep_508(with_extras=False)
dependency.to_pep_508(with_extras=False) if ';' in requirement:
) requirement, conditions = requirement.split(';')
requirement = requirement.strip()
if req_regex.match(requirement):
requirement = req_regex.sub('\\1\\2',
requirement.strip())
extras[extra_name + ':' + conditions.strip()].append(requirement)
continue
requirement = requirement.strip()
if req_regex.match(requirement):
requirement = req_regex.sub('\\1\\2',
requirement.strip())
extras[extra_name].append(requirement)
continue continue
requirement = dependency.to_pep_508() requirement = dependency.to_pep_508()
if ';' in requirement:
requirement, conditions = requirement.split(';')
requirement = requirement.strip()
if req_regex.match(requirement):
requirement = req_regex.sub('\\1\\2', requirement.strip())
extras[':' + conditions.strip()].append(requirement)
continue
requirement = requirement.strip()
if req_regex.match(requirement):
requirement = req_regex.sub('\\1\\2', requirement.strip())
main.append(requirement) main.append(requirement)
return main, dict(extras) return main, dict(extras)
......
...@@ -46,9 +46,9 @@ def test_convert_dependencies(): ...@@ -46,9 +46,9 @@ def test_convert_dependencies():
] ]
) )
main = [ main = [
'A (>=1.0.0.0,<2.0.0.0)', 'A>=1.0.0.0,<2.0.0.0',
'B (>=1.0.0.0,<1.1.0.0)', 'B>=1.0.0.0,<1.1.0.0',
'C (==1.2.3.0)', 'C==1.2.3.0',
] ]
extras = {} extras = {}
...@@ -68,11 +68,48 @@ def test_convert_dependencies(): ...@@ -68,11 +68,48 @@ def test_convert_dependencies():
] ]
) )
main = [ main = [
'B (>=1.0.0.0,<1.1.0.0)', 'B>=1.0.0.0,<1.1.0.0',
'C (==1.2.3.0)', 'C==1.2.3.0',
] ]
extras = { extras = {
'bar': ['A (>=1.2.0.0)'] 'bar': ['A>=1.2.0.0']
}
assert result == (main, extras)
c = get_dependency('C', '1.2.3')
c.python_versions = '~2.7 || ^3.6'
d = get_dependency('D', '3.4.5', optional=True)
d.python_versions = '~2.7 || ^3.4'
package.extras = {
'baz': [get_dependency('D')]
}
result = SdistBuilder.convert_dependencies(
package,
[
get_dependency('A', '>=1.2', optional=True),
get_dependency('B', '~1.0'),
c,
d
]
)
main = [
'B>=1.0.0.0,<1.1.0.0',
]
extra_python = (
':(python_version >= "2.7.0.0" and python_version < "2.8.0.0") '
'or (python_version >= "3.6.0.0" and python_version < "4.0.0.0")'
)
extra_d_dependency = (
'baz:(python_version >= "2.7.0.0" and python_version < "2.8.0.0") '
'or (python_version >= "3.4.0.0" and python_version < "4.0.0.0")'
)
extras = {
extra_python: ['C==1.2.3.0'],
extra_d_dependency: ['D==3.4.5.0'],
} }
assert result == (main, extras) assert result == (main, extras)
...@@ -94,7 +131,7 @@ def test_make_setup(): ...@@ -94,7 +131,7 @@ def test_make_setup():
'my_package.sub_pkg2' 'my_package.sub_pkg2'
] ]
assert ns['install_requires'] == [ assert ns['install_requires'] == [
'cleo (>=0.6.0.0,<0.7.0.0)' 'cleo>=0.6.0.0,<0.7.0.0'
] ]
assert ns['entry_points'] == { assert ns['entry_points'] == {
'console_scripts': [ 'console_scripts': [
...@@ -104,7 +141,7 @@ def test_make_setup(): ...@@ -104,7 +141,7 @@ def test_make_setup():
} }
assert ns['extras_require'] == { assert ns['extras_require'] == {
'time': [ 'time': [
'pendulum (>=1.4.0.0,<2.0.0.0)' 'pendulum>=1.4.0.0,<2.0.0.0'
] ]
} }
......
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