python-poetry / python-poetry/poetry

Poetry config can be messed up by incorrect user command

Open
#10,570 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

kind/bug status/triage
Dominant language
Python
Stars
34.3k
Forks
2.5k
Avg merge
2d 19h
Merged PRs (30d)
30

Description

Description

I think I was able to bork my poetry environment by using this command

poetry config -- repositories.repo2.url "https://us-python.pkg.dev/org/repo/"

The correct command is

poetry config -- repositories.repo2 "https://us-python.pkg.dev/org/repo/"

All subsequent commands to try to modify my poetry config failed

Looks like my config file /Users/user/Library/Application Support/pypoetry/config.toml ended up getting borked as follows (note the .url at end of last entry)

[repositories.repo1]
url = "https://us-python.pkg.dev/org/repo/"

[repositories.repo2.url]
url = "https://us-python.pkg.dev/org/repo/"
Workarounds

Remove the config file or manually edit it

Poetry Installation Method

pipx

Operating System

macOS 15.6.1

Poetry Version

2.2.1

Poetry Configuration
unhashable type: 'dict'
Python Sysconfig
sysconfig.log $ poetry config list

unhashable type: 'dict'

$ poetry -vv debug info

Poetry

Stack trace:

18 ~/.local/pipx/venvs/poetry/lib/python3.13/site-packages/cleo/application.py:327 in run
exit_code = self._run(io)

17 ~/.local/pipx/venvs/poetry/lib/python3.13/site-packages/poetry/console/application.py:260 in _run
exit_code = super()._run(io)

16 ~/.local/pipx/venvs/poetry/lib/python3.13/site-packages/cleo/application.py:431 in _run
exit_code = self._run_command(command, io)

15 ~/.local/pipx/venvs/poetry/lib/python3.13/site-packages/cleo/application.py:473 in _run_command
raise error

14 ~/.local/pipx/venvs/poetry/lib/python3.13/site-packages/cleo/application.py:457 in _run_command
exit_code = command.run(io)

13 ~/.local/pipx/venvs/poetry/lib/python3.13/site-packages/cleo/commands/base_command.py:117 in run
return self.execute(io) or 0

12 ~/.local/pipx/venvs/poetry/lib/python3.13/site-packages/cleo/commands/command.py:61 in execute
return self.handle()

11 ~/.local/pipx/venvs/poetry/lib/python3.13/site-packages/poetry/console/commands/debug/info.py:20 in handle
f"Version: {self.poetry.VERSION}",

10 ~/.local/pipx/venvs/poetry/lib/python3.13/site-packages/poetry/console/commands/command.py:24 in poetry
return self.get_application().poetry

9 ~/.local/pipx/venvs/poetry/lib/python3.13/site-packages/poetry/console/application.py:199 in poetry
self._poetry = Factory().create_poetry(

8 ~/.local/pipx/venvs/poetry/lib/python3.13/site-packages/poetry/factory.py:106 in create_poetry
self.create_pool(

7 ~/.local/pipx/venvs/poetry/lib/python3.13/site-packages/poetry/factory.py:164 in create_pool
cls.create_package_source(

6 ~/.local/pipx/venvs/poetry/lib/python3.13/site-packages/poetry/factory.py:198 in create_package_source
return PyPiRepository(

5 ~/.local/pipx/venvs/poetry/lib/python3.13/site-packages/poetry/repositories/pypi_repository.py:50 in init
super().init(

4 ~/.local/pipx/venvs/poetry/lib/python3.13/site-packages/poetry/repositories/http_repository.py:67 in init
self._authenticator.add_repository(name, url)

3 ~/.local/pipx/venvs/poetry/lib/python3.13/site-packages/poetry/utils/authenticator.py:404 in add_repository
self.configured_repositories[name] = AuthenticatorRepositoryConfig(name, url)

2 ~/.local/pipx/venvs/poetry/lib/python3.13/site-packages/poetry/utils/authenticator.py:394 in configured_repositories
AuthenticatorRepositoryConfig(repository_name, url)

1 :5 in init

TypeError

unhashable type: 'dict'

at ~/.local/pipx/venvs/poetry/lib/python3.13/site-packages/poetry/utils/authenticator.py:75 in post_init
71│ netloc: str = dataclasses.field(init=False)
72│ path: str = dataclasses.field(init=False)
73│
74│ def post_init(self) -> None:
→ 75│ parsed_url = urllib.parse.urlsplit(self.url)
76│ self.netloc = parsed_url.netloc
77│ self.path = parsed_url.path
78│
79│ def certs(self, config: Config) -> RepositoryCertificateConfig:
$ poetry about
Poetry - Package Management for Python

Version: 2.2.1
Poetry-Core Version: 2.2.1

Poetry is a dependency manager tracking local dependencies of your projects and libraries.
See https://github.com/python-poetry/poetry for more information.

Example pyproject.toml

Poetry Runtime Logs
poetry-runtime.log
Paste the output of 'poetry -vvv <command>', over this line.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reproducing the poetry config -- repositories.repo2.url command and inspect /Users/user/Library/Application Support/pypoetry/config.toml. Trace how the poetry config entry point writes repository settings, then verify that an incorrect key cannot make later Poetry commands fail with unhashable type: 'dict' and that the configuration remains usable.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
cli, tooling
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.