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

`IniConfig` returns the raw `configparser` values, and
`_dict_to_dataclass()` assigns them without conversion, so non-string
fields get strings. This is especially problematic for booleans, since
`"false"` is truthy.

setup.cfg:

    [t]
    flag = false
    n = 3

test.py:

    from dataclasses import dataclass
    from pathlib import Path

    from pytoolconfig import PyToolConfig
    from pytoolconfig.sources import SetupConfig

    @dataclass
    class Config:
        flag: bool = True
        n: int = 0

    cwd = Path(".")
    config = PyToolConfig("t", cwd, Config, custom_sources=[SetupConfig(cwd, 
"t")]).parse()
    print(repr(config.flag), repr(config.n))

Actual: `'false' '3'`

Expected: `False 3`

Since INI has no types, the values need to be converted according to the
field type, e.g. `ConfigParser.getboolean()` semantics for `bool`, and
`int()` / `float()` for numeric fields.

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