Repository navigation
Description
- I am on the latest Poetry version.
- I have searched the issues of this repo and believe that this is not a duplicate.
- If an exception occurs when executing a command, I executed it again in debug mode (
-vvvoption).
Not on latest, because I am on 1.2.0a2, which is newer than latest.
- OS version and name: Linux Debian Bullseye in a container
- Poetry version: 1.2.0a2
- pyproject.toml file:
[tool.poetry]
name = "foobar"
version = "0.1.0"
description = ""
authors = ["Your Name <you@example.com>"]
readme = "README.md"
[tool.poetry.dependencies]
python = "^3.9"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
[[tool.poetry.source]]
name = "foo"
url = "https://foo.bar/simple/"
Issue
When using a private repo (i.e. having a [[tool.poetry.source]] section to pyproject.toml), and adding a group dependency (e.g. running poetry add --group test pytest, e.g. the feature added in #4260) for a group that does not yet exist in the pyproject.toml, poetry raises an exception.
# poetry add --group test pytest
AttributeError
'dict' object has no attribute '_insert_after'
at /usr/local/lib/python3.9/site-packagesconsole/commands/add.py:114 in handle
110│ else:
111│ if "group" not in poetry_content:
112│ group_table = table()
113│ group_table._is_super_table = True
→ 114│ poetry_content.value._insert_after("dependencies", "group", group_table)
115│
116│ groups = poetry_content["group"]
117│ if group not in groups:
118│ group_table = parse_toml(
Even though the example above has an invalid URL for the poetry source, this error happens even when the URL is valid and the necessary credentials to authenticate are present (e.g. a valid Google Artifact Repository repo), and regardless of whether the source is primary or secondary.
Also note that the dependency being added isn't even hosted inside the private repo. (In this case, trying to add pytest to a group called "test".)
Removing the [[tool.poetry.source]] section allows Poetry to properly add the dependency group and dependency.
The above pyproject.toml was generated using the following:
docker run -it --rm python:3.9-slim-bullseye bash
# Within the container:
pip install poetry==1.2.0a2
poetry init --name foobar -n
cat >> pyproject.toml <<EOF
[[tool.poetry.source]]
name = "foo"
url = "https://foo.bar/simple/"
EOF
# Then run poetry add --group test pytest to see the error
Full output when running with -vvv
# poetry -vvv add pytest --group test
Loading configuration file /root/.config/pypoetry/config.toml
Adding repository phc (https://us-central1-python.pkg.dev/foobar/python/simple) and setting it as secondary
Using virtualenv: /venv
Stack trace:
7 /usr/local/lib/python3.9/site-packages/cleo/application.py:330 in run
328│
329│ try:
→ 330│ exit_code = self._run(io)
331│ except Exception as e:
332│ if not self._catch_exceptions:
6 /usr/local/lib/python3.9/site-packages/poetry/console/application.py:180 in _run
178│ self._load_plugins(io)
179│
→ 180│ return super()._run(io)
181│
182│ def _configure_io(self, io: IO) -> None:
5 /usr/local/lib/python3.9/site-packages/cleo/application.py:425 in _run
423│ io.set_input(ArgvInput(argv))
424│
→ 425│ exit_code = self._run_command(command, io)
426│ self._running_command = None
427│
4 /usr/local/lib/python3.9/site-packages/cleo/application.py:467 in _run_command
465│
466│ if error is not None:
→ 467│ raise error
468│
469│ return event.exit_code
3 /usr/local/lib/python3.9/site-packages/cleo/application.py:451 in _run_command
449│
450│ if event.command_should_run():
→ 451│ exit_code = command.run(io)
452│ else:
453│ exit_code = ConsoleCommandEvent.RETURN_CODE_DISABLED
2 /usr/local/lib/python3.9/site-packages/cleo/commands/base_command.py:118 in run
116│ io.input.validate()
117│
→ 118│ status_code = self.execute(io)
119│
120│ if status_code is None:
1 /usr/local/lib/python3.9/site-packages/cleo/commands/command.py:85 in execute
83│
84│ try:
→ 85│ return self.handle()
86│ except KeyboardInterrupt:
87│ return 1
AttributeError
'dict' object has no attribute '_insert_after'
at /usr/local/lib/python3.9/site-packages/poetry/console/commands/add.py:114 in handle
110│ else:
111│ if "group" not in poetry_content:
112│ group_table = table()
113│ group_table._is_super_table = True
→ 114│ poetry_content.value._insert_after("dependencies", "group", group_table)
115│
116│ groups = poetry_content["group"]
117│ if group not in groups:
118│ group_table = parse_toml(
Activity
mbarrien commentedon Nov 6, 2021
Did some more investigation. This error only happens if the
[[tool.poetry.source]]section is the last one in the file. If the order of the clauses is swapped around like so(Notice that
[build-system]and[[tool.poetry.source]]have swapped positions)I noticed this because I was trying to create the above test case using a different command instead of the append
poetry source add foo http://foo.bar/simple, which added the source before build-system.RileyMShea commentedon Nov 17, 2021
I have the same error, also on version Poetry (version 1.2.0a2) but for me it occurs when references a local library ie
somelibthat has it's own pyproject.tomlCan be traced back to the update 1.2.0a2 here:
4b8384c#diff-8005012c00c842592c28b01560b1f9522146f351b70df58fadfec5c0245bd523
Unsure of the specifics, but it if you don't have a previously toml [tool.poetry.group] (or an tool.poetry.group.whatever.dependencies
)
this blows up:
poetry/poetry/console/commands/add.py
Lines 105 to 114 in 4b8384c
jbsilva commentedon Nov 27, 2021
An error in the same line happened with me when trying to add a new dev dependency to a project that was created with Poetry v1.1.11.
Replacing
[tool.poetry.dev-dependencies]with[tool.poetry.group.dev.dependencies]solved the problem.lindycoder commentedon Dec 21, 2021
I can reproduce quickly this with
on
produces
I confirm that moving the
[build-system]section at the end solves the problemskion commentedon May 25, 2022
Same here on
1.2.0b1abn commentedon May 25, 2022
Root cause is at python-poetry/tomlkit#196
Fix for poetry#4718
github-actions commentedon Mar 1, 2024
This issue has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.