Skip to content

Commit 1a1397a

Browse files
authored
Merge pull request #3042 from abravalheri/issue-3038
Ensure log level is set correctly (and `setuptools.logging.set_threshold` is called)
2 parents 120dd88 + 711b526 commit 1a1397a

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

setuptools/logging.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@ def configure():
2424
format="{message}", style='{', handlers=handlers, level=logging.DEBUG)
2525
monkey.patch_func(set_threshold, distutils.log, 'set_threshold')
2626

27+
# For some reason `distutils.log` module is getting cached in `distutils.dist`
28+
# and then loaded again when patched,
29+
# implying: id(distutils.log) != id(distutils.dist.log).
30+
# Make sure the same module object is used everywhere:
31+
distutils.dist.log = distutils.log
32+
2733

2834
def set_threshold(level):
2935
logging.root.setLevel(level*10)

setuptools/tests/test_logging.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import logging
2+
3+
import pytest
4+
5+
6+
setup_py = """\
7+
from setuptools import setup
8+
9+
setup(
10+
name="test_logging",
11+
version="0.0"
12+
)
13+
"""
14+
15+
16+
@pytest.mark.parametrize(
17+
"flag, expected_level", [("--dry-run", "INFO"), ("--verbose", "DEBUG")]
18+
)
19+
def test_verbosity_level(tmp_path, monkeypatch, flag, expected_level):
20+
"""Make sure the correct verbosity level is set (issue #3038)"""
21+
import setuptools # noqa: Import setuptools to monkeypatch distutils
22+
import distutils # <- load distutils after all the patches take place
23+
24+
logger = logging.Logger(__name__)
25+
monkeypatch.setattr(logging, "root", logger)
26+
unset_log_level = logger.getEffectiveLevel()
27+
assert logging.getLevelName(unset_log_level) == "NOTSET"
28+
29+
setup_script = tmp_path / "setup.py"
30+
setup_script.write_text(setup_py)
31+
dist = distutils.core.run_setup(setup_script, stop_after="init")
32+
dist.script_args = [flag, "sdist"]
33+
dist.parse_command_line() # <- where the log level is set
34+
log_level = logger.getEffectiveLevel()
35+
log_level_name = logging.getLevelName(log_level)
36+
assert log_level_name == expected_level

0 commit comments

Comments
 (0)