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

Fix optional dependencies being set as required in sdist

parent 601652a3
Loading
Loading
Loading
Loading
+1 −0
Changes for CHANGELOG.md: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@
### Fixed

- Fixed Python version retrieval inside virtualenvs.
- Fixed optional dependencies being set as required in sdist.


## [0.6.3] - 2018-03-20
+14 −7
Changes for poetry/masonry/builders/sdist.py: 14 added lines, 7 removed lines.
Original line number Diff line number Diff line
@@ -130,7 +130,10 @@ class SdistBuilder(Builder):
        else:
            extra.append("'py_modules': {!r},".format(self._module.name))

        dependencies, extras = self.convert_dependencies(self._package.requires)
        dependencies, extras = self.convert_dependencies(
            self._package,
            self._package.requires
        )
        if dependencies:
            before.append("install_requires = \\\n{}\n".format(pformat(dependencies)))
            extra.append("'install_requires': install_requires,")
@@ -213,19 +216,23 @@ class SdistBuilder(Builder):

    @classmethod
    def convert_dependencies(cls,
                             package,
                             dependencies: List[Dependency]):
        main = []
        extras = []
        extras = defaultdict(list)

        for dependency in dependencies:
            requirement = dependency.to_pep_508()
            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())
                continue

            if ';' in requirement:
                extras.append(requirement)
            else:
            requirement = dependency.to_pep_508()
            main.append(requirement)

        return main, extras
        return main, dict(extras)

    @classmethod
    def clean_tarinfo(cls, tar_info):
+4 −0
Changes for tests/masonry/builders/fixtures/complete/pyproject.toml: 4 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -21,9 +21,13 @@ keywords = ["packaging", "dependency", "poetry"]
python = "^3.6"
cleo = "^0.6"

pendulum = { version = "^1.4", optional = true }

[tool.poetry.dev-dependencies]
pytest = "~3.4"

[tool.poetry.extras]
time = ["pendulum"]

[tool.poetry.scripts]
my-script = "my_package:main"
+26 −11
Changes for tests/masonry/builders/test_sdist.py: 26 added lines, 11 removed lines.
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@ from pathlib import Path
from poetry import Poetry
from poetry.io import NullIO
from poetry.masonry.builders.sdist import SdistBuilder
from poetry.packages import Package
from poetry.utils.venv import NullVenv

from tests.helpers import get_dependency
@@ -36,35 +37,44 @@ def project(name):


def test_convert_dependencies():
    result = SdistBuilder.convert_dependencies([
    package = Package('foo', '1.2.3')
    result = SdistBuilder.convert_dependencies(
        package,
        [
            get_dependency('A', '^1.0'),
            get_dependency('B', '~1.0'),
            get_dependency('C', '1.2.3'),
    ])
        ]
    )
    main = [
        'A (>=1.0.0.0,<2.0.0.0)',
        'B (>=1.0.0.0,<1.1.0.0)',
        'C (==1.2.3.0)',
    ]
    extras = []
    extras = {}

    assert result == (main, extras)

    dependency_with_python = get_dependency('A', '^1.0')
    dependency_with_python.python_versions = '^3.4'
    package = Package('foo', '1.2.3')
    package.extras = {
        'bar': [get_dependency('A')]
    }

    result = SdistBuilder.convert_dependencies([
        dependency_with_python,
    result = SdistBuilder.convert_dependencies(
        package,
        [
            get_dependency('A', '>=1.2', optional=True),
            get_dependency('B', '~1.0'),
            get_dependency('C', '1.2.3'),
    ])
        ]
    )
    main = [
        'B (>=1.0.0.0,<1.1.0.0)',
        'C (==1.2.3.0)',
    ]
    extras = [
        'A (>=1.0.0.0,<2.0.0.0); python_version>="3.4.0.0" and python_version<"4.0.0.0"',
    ]
    extras = {
        'bar': ['A (>=1.2.0.0)']
    }

    assert result == (main, extras)

@@ -93,6 +103,11 @@ def test_make_setup():
            'my-2nd-script = my_package:main2',
        ]
    }
    assert ns['extras_require'] == {
        'time': [
            'pendulum (>=1.4.0.0,<2.0.0.0)'
        ]
    }


def test_find_files_to_add():