Why is the interpolation key 'asctime' not a valid option name?
Asked Answered
P

1

6

I have a setup.cfg with

[tool:pytest]
doctest_encoding = utf-8
log_cli = 0
log_cli_level = INFO
log_cli_format = %(asctime)s [%(levelname)8s] %(message)s (%(filename)s:%(lineno)s)
log_cli_date_format=%Y-%m-%d %H:%M:%S

and I get the following error message

$ pip install .[all]
Processing /some/repo
    ERROR: Complete output from command python setup.py egg_info:
    ERROR: Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-req-build-599014dc/setup.py", line 72, in <module>
        setup(**config)
      File "/usr/local/lib/python3.7/site-packages/setuptools/__init__.py", line 144, in setup
        _install_setup_requires(attrs)
      File "/usr/local/lib/python3.7/site-packages/setuptools/__init__.py", line 137, in _install_setup_requires
        dist.parse_config_files(ignore_option_errors=True)
      File "/usr/local/lib/python3.7/site-packages/setuptools/dist.py", line 695, in parse_config_files
        self._parse_config_files(filenames=filenames)
      File "/usr/local/lib/python3.7/site-packages/setuptools/dist.py", line 599, in _parse_config_files
        val = self._try_str(parser.get(section, opt))
      File "/usr/local/lib/python3.7/configparser.py", line 799, in get
        d)
      File "/usr/local/lib/python3.7/configparser.py", line 394, in before_get
        self._interpolate_some(parser, option, L, value, section, defaults, 1)
      File "/usr/local/lib/python3.7/configparser.py", line 434, in _interpolate_some
        option, section, rawval, var) from None
    configparser.InterpolationMissingOptionError: Bad value substitution: option 'log_cli_format' in section 'tool:pytest' contains an interpolation key 'asctime' which is not a valid option name. Raw value: '%(asctime)s [%(levelname)8s] %(message)s (%(filename)s:%(lineno)s)'
    ----------------------------------------
ERROR: Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-req-build-599014dc/
ERROR: Job failed: exit code 1

when it is executed in a Docker image based on python:3.7-slim on Gitlab.

When I remove the two lines

log_cli_format = %(asctime)s [%(levelname)8s] %(message)s (%(filename)s:%(lineno)s)
log_cli_date_format=%Y-%m-%d %H:%M:%S

it works also in the Docker container running on Gitlab. It works for both on my machine (Ubuntu 18.04)

Why does that happen and how do I fix it?

Pasteurization answered 29/5, 2019 at 11:28 Comment(1)
You've ran into pips issue #5182, also you might find pytests issue #3062 interesting. In short, pytest only accepts log formats in percent style, while distutils treats them as interpolation values. The workaround is to extract [tool:pytest] section out of setup.cfg into pytest.ini.Dibble
M
0
log_cli_format = %%(asctime)s [%%(levelname)8s] %%(message)s (%%(filename)s:%%(lineno)s)
log_cli_date_format=%%Y-%%m-%%d %%H:%%M:%%S
Manos answered 2/9, 2022 at 6:7 Comment(1)
Hi, could you elaborate the answer. Code snippet like that may not be clear to someone, or anyone...Munos

© 2022 - 2024 — McMap. All rights reserved.