Package: python3-pytoolconfig
Version: 1.3.1-5
Severity: minor
Tags: upstream

The documentation ("Configuration Load Order" in `docs/index.rst`) lists
the command line first, as the highest priority source. However,
`PyToolConfig.parse()` applies the universal configuration values after
the command line arguments, so a value set in `[tool.pytoolconfig]` (or
derived from `[project]`) overrides an option passed explicitly on the
command line.

pyproject.toml:

    [tool.pytoolconfig]
    max_line_length = 100

test.py:

    from argparse import ArgumentParser
    from dataclasses import dataclass
    from pathlib import Path

    from pytoolconfig import PyToolConfig, UniversalKey, field

    @dataclass
    class Config:
        line: int = field(
            80,
            command_line=("--line",),
            universal_config=UniversalKey.max_line_length,
        )

    config = PyToolConfig("t", Path("."), Config, arg_parser=ArgumentParser())
    print(config.parse(["--line", "120"]).line)

Actual: `100`

Expected: `120`, as per the documented load order.

Applying the universal values before the command line arguments in
`parse()` would fix it.

Reproduced with python3-pytoolconfig 1.3.1-5 (code unchanged in 1.3.1-6)
on Python 3.13 and 3.14, and with upstream main (bee6db4).

This is an upstream bug, it will be forwarded.


-- System Information:
Debian Release: forky/sid
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 7.2.9+deb14-amd64 (SMP w/12 CPU threads; PREEMPT)
Locale: LANG=it_IT.UTF-8, LC_CTYPE=it_IT.UTF-8 (charmap=UTF-8), LANGUAGE=it
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Reply via email to