Commit a2f9aec5 by Sébastien Eustace

Fix optional dependencies being set as required in sdist

parent 601652a3
......@@ -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
......
......@@ -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):
......
......@@ -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"
......
......@@ -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():
......
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