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