python-poetry/poetry · error · ValueError

You must pass the url. Example: poetry config repositories.f

Error message

You must pass the url. Example: poetry config repositories.foo https://bar.com

What it means

Raises ValueError in ConfigCommand.handle() when setting a repository but the number of values provided is not exactly 1. A repository needs a single URL argument; providing zero values (impossible due to earlier checks) or 2+ values triggers this. The check at line 255-267: if len(values) != 1, the error is raised after the len(values) == 1 success branch.

Source

Thrown at src/poetry/console/commands/config.py:264

                    # Unset a specific sub-property
                    config.config_source.remove_property(
                        ["repositories", repo_name, m.group(2)]
                    )
                else:
                    config.config_source.remove_property(["repositories", repo_name])

                return 0

            if len(values) == 1:
                url = values[0]

                config.config_source.add_property(
                    ["repositories", repo_name, "url"], url
                )

                return 0

            raise ValueError(
                "You must pass the url. "
                "Example: poetry config repositories.foo https://bar.com"
            )

        # handle auth
        m = re.match(r"^(http-basic|pypi-token)\.(.+)", self.argument("key"))
        if m:
            from poetry.utils.password_manager import PasswordManager

            password_manager = PasswordManager(config)
            if self.option("unset"):
                if m.group(1) == "http-basic":
                    password_manager.delete_http_password(m.group(2))
                elif m.group(1) == "pypi-token":
                    password_manager.delete_pypi_token(m.group(2))

                return 0

View on GitHub (pinned to 92b74dcfe3)

Solutions

  1. Provide exactly one URL: `poetry config repositories.myrepo https://example.com/simple/`.

Example fix

# before (error)
poetry config repositories.myrepo https://a.com https://b.com
# after
poetry config repositories.myrepo https://example.com/simple/
Defensive patterns

Strategy: validation

Validate before calling

def validate_repo_url(values: list[str]) -> None:
    if len(values) != 1:
        raise ValueError(
            f"Expected exactly 1 URL, got {len(values)}. "
            "Example: poetry config repositories.foo https://bar.com"
        )

Type guard

def has_single_url(values: list[str]) -> bool:
    return len(values) == 1

Prevention

When it happens

Trigger: Running `poetry config repositories.myrepo https://a.com https://b.com` (two URLs) — len(values) is 2, not 1.

Common situations: User passes multiple URLs by mistake, or passes additional arguments that get collected into the multiple=True value argument.

Related errors


AI-assisted analysis of python-poetry/poetry@92b74dcfe3 (2026-08-04). Data as JSON: /data/errors/ba05e30aade76b1b.json. Report an issue: GitHub.