Unverified Commit 97597ba6 authored by Sébastien Eustace's avatar Sébastien Eustace
Browse files

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

parent 09fae426
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -12,6 +12,11 @@
- Improved dependency resolution time by using cache control.


### Fixed

- Fixed `install_requires` and `extras` in generated sdist.


## [0.7.1] - 2018-04-05

### Fixed
+35 −3
Original line number Diff line number Diff line
from __future__ import unicode_literals

import os
import re
import tarfile

from collections import defaultdict
@@ -227,18 +228,49 @@ class SdistBuilder(Builder):
                             ):
        main = []
        extras = defaultdict(list)
        req_regex = re.compile('^(.+) \((.+)\)$')

        for dependency in dependencies:
            if dependency.is_optional():
                for extra_name, reqs in package.extras.items():
                    for req in reqs:
                        if req.name == dependency.name:
                            extras[extra_name].append(
                                dependency.to_pep_508(with_extras=False)
                            )
                            requirement = 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

            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)

        return main, dict(extras)
+45 −8
Original line number Diff line number Diff line
@@ -46,9 +46,9 @@ def test_convert_dependencies():
        ]
    )
    main = [
        'A (>=1.0.0.0,<2.0.0.0)',
        'B (>=1.0.0.0,<1.1.0.0)',
        'C (==1.2.3.0)',
        'A>=1.0.0.0,<2.0.0.0',
        'B>=1.0.0.0,<1.1.0.0',
        'C==1.2.3.0',
    ]
    extras = {}

@@ -68,11 +68,48 @@ def test_convert_dependencies():
        ]
    )
    main = [
        'B (>=1.0.0.0,<1.1.0.0)',
        'C (==1.2.3.0)',
        'B>=1.0.0.0,<1.1.0.0',
        'C==1.2.3.0',
    ]
    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)
@@ -94,7 +131,7 @@ def test_make_setup():
        'my_package.sub_pkg2'
    ]
    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'] == {
        'console_scripts': [
@@ -104,7 +141,7 @@ def test_make_setup():
    }
    assert ns['extras_require'] == {
        'time': [
            'pendulum (>=1.4.0.0,<2.0.0.0)'
            'pendulum>=1.4.0.0,<2.0.0.0'
        ]
    }