Skip to content

Commit 5dab851

Browse files
authored
parse extras correctly at 'poetry add' (#7836)
1 parent 22efbad commit 5dab851

File tree

2 files changed

+53
-1
lines changed

2 files changed

+53
-1
lines changed

src/poetry/console/commands/add.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ def handle(self) -> int:
192192
for extra in self.option("extras"):
193193
extras += extra.split()
194194

195-
constraint["extras"] = self.option("extras")
195+
constraint["extras"] = extras
196196

197197
if self.option("editable"):
198198
if "git" in _constraint or "path" in _constraint:

tests/console/commands/test_add.py

+52
Original file line numberDiff line numberDiff line change
@@ -1415,3 +1415,55 @@ def test_add_with_path_dependency_no_loopiness(
14151415

14161416
with pytest.raises(SolverProblemError):
14171417
tester.execute("requests")
1418+
1419+
1420+
def test_add_extras_are_parsed_and_included(
1421+
app: PoetryTestApplication,
1422+
repo: TestRepository,
1423+
tester: CommandTester,
1424+
) -> None:
1425+
msgpack_dep = get_dependency("msgpack-python", ">=0.5 <0.6", optional=True)
1426+
redis_dep = get_dependency("redis", ">=3.3.6 <4.0.0", optional=True)
1427+
1428+
cachy = get_package("cachy", "0.2.0")
1429+
cachy.add_dependency(msgpack_dep)
1430+
cachy.add_dependency(redis_dep)
1431+
cachy.extras = {
1432+
canonicalize_name("redis"): [redis_dep],
1433+
canonicalize_name("msgpack"): [msgpack_dep],
1434+
}
1435+
repo.add_package(cachy)
1436+
1437+
msgpack = get_package("msgpack-python", "0.5.1")
1438+
repo.add_package(msgpack)
1439+
1440+
redis = get_package("redis", "3.4.0")
1441+
repo.add_package(redis)
1442+
1443+
tester.execute('cachy --extras "redis msgpack"')
1444+
1445+
expected = """\
1446+
Using version ^0.2.0 for cachy
1447+
1448+
Updating dependencies
1449+
Resolving dependencies...
1450+
1451+
Package operations: 3 installs, 0 updates, 0 removals
1452+
1453+
• Installing msgpack-python (0.5.1)
1454+
• Installing redis (3.4.0)
1455+
• Installing cachy (0.2.0)
1456+
1457+
Writing lock file
1458+
"""
1459+
1460+
assert tester.io.fetch_output() == expected
1461+
1462+
pyproject: dict[str, Any] = app.poetry.file.read()
1463+
content = pyproject["tool"]["poetry"]
1464+
1465+
assert "cachy" in content["dependencies"]
1466+
assert content["dependencies"]["cachy"] == {
1467+
"version": "^0.2.0",
1468+
"extras": ["redis", "msgpack"],
1469+
}

0 commit comments

Comments
 (0)