Skip to content

AttributeError when adding a dependency group when private repo present (Poetry 1.2.0a2) #4718

@mbarrien

Description

@mbarrien
  • 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 (-vvv option).

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(

Metadata

Metadata

Assignees

No one assigned

    Labels

    kind/bugSomething isn't working as expected

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions