Skip to content

Commit

Permalink
[724] handle ast.Name values in extras_require (python-poetry#883)
Browse files Browse the repository at this point in the history
* fixing python-poetry#724

* added test for issue 724
  • Loading branch information
asodeur authored and sdispater committed Mar 6, 2019
1 parent 3c1957f commit 4f21527
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 2 deletions.
12 changes: 10 additions & 2 deletions poetry/utils/setup_reader.py
Original file line number Diff line number Diff line change
Expand Up @@ -282,15 +282,23 @@ def _find_extras_require(

if isinstance(value, ast.Dict):
for key, val in zip(value.keys, value.values):
extras_require[key.s] = [e.s for e in val.elts]
if isinstance(val, ast.Name):
val = self._find_variable_in_body(body, val.id)

if isinstance(val, ast.List):
extras_require[key.s] = [e.s for e in val.elts]
elif isinstance(value, ast.Name):
variable = self._find_variable_in_body(body, value.id)

if variable is None or not isinstance(variable, ast.Dict):
return extras_require

for key, val in zip(variable.keys, variable.values):
extras_require[key.s] = [e.s for e in val.elts]
if isinstance(val, ast.Name):
val = self._find_variable_in_body(body, val.id)

if isinstance(val, ast.List):
extras_require[key.s] = [e.s for e in val.elts]

return extras_require

Expand Down
11 changes: 11 additions & 0 deletions tests/utils/fixtures/setups/extras_require_with_vars/setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
from setuptools import setup

tests_require = ["pytest"]

setup(
name="extras_require_with_vars",
version="0.0.1",
description="test setup_reader.py",
install_requires=[],
extras_require={"test": tests_require},
)
17 changes: 17 additions & 0 deletions tests/utils/test_setup_reader.py
Original file line number Diff line number Diff line change
Expand Up @@ -149,3 +149,20 @@ def test_setup_reader_read_setup_call_in_main(setup):
assert expected_install_requires == result["install_requires"]
assert expected_extras_require == result["extras_require"]
assert expected_python_requires == result["python_requires"]


@pytest.mark.skipif(not PY35, reason="AST parsing does not work for Python <3.4")
def test_setup_reader_read_extras_require_with_variables(setup):
result = SetupReader.read_from_directory(setup("extras_require_with_vars"))

expected_name = "extras_require_with_vars"
expected_version = "0.0.1"
expected_install_requires = []
expected_extras_require = {"test": ["pytest"]}
expected_python_requires = None

assert expected_name == result["name"]
assert expected_version == result["version"]
assert expected_install_requires == result["install_requires"]
assert expected_extras_require == result["extras_require"]
assert expected_python_requires == result["python_requires"]

0 comments on commit 4f21527

Please sign in to comment.