Skip to content

Commit f0d95cb

Browse files
authored
Do not configure logger in codemodder.run (#905)
* Only set logger logging level, not global logging level * Do not configure logger in `codemodder.run` * Try using caplog context manager * Configure the logger directly in the test
1 parent 199d696 commit f0d95cb

File tree

3 files changed

+35
-44
lines changed

3 files changed

+35
-44
lines changed

src/codemodder/codemodder.py

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,7 @@
1515
from codemodder.context import CodemodExecutionContext
1616
from codemodder.dependency import Dependency
1717
from codemodder.llm import MisconfiguredAIClient
18-
from codemodder.logging import (
19-
OutputFormat,
20-
configure_logger,
21-
log_list,
22-
log_section,
23-
logger,
24-
)
18+
from codemodder.logging import configure_logger, log_list, log_section, logger
2519
from codemodder.project_analysis.file_parsers.package_store import PackageStore
2620
from codemodder.project_analysis.python_repo_manager import PythonRepoManager
2721
from codemodder.result import ResultSet
@@ -124,8 +118,6 @@ def run(
124118
output: Path | str | None = None,
125119
output_format: str = "codetf",
126120
verbose: bool = False,
127-
log_format: OutputFormat = OutputFormat.JSON,
128-
project_name: str | None = None,
129121
tool_result_files_map: DefaultDict[str, list[Path]] = defaultdict(list),
130122
path_include: list[str] | None = None,
131123
path_exclude: list[str] | None = None,
@@ -148,8 +140,6 @@ def run(
148140

149141
provider_registry = providers.load_providers()
150142

151-
configure_logger(verbose, log_format, project_name)
152-
153143
log_section("startup")
154144
logger.info("codemodder: python/%s", __version__)
155145

@@ -254,15 +244,14 @@ def _run_cli(original_args) -> int:
254244
tool_result_files_map["defectdojo"].extend(argv.defectdojo_findings_json or [])
255245

256246
logger.info("command: %s %s", Path(sys.argv[0]).name, " ".join(original_args))
247+
configure_logger(argv.verbose, argv.log_format, argv.project_name)
257248

258249
_, status = run(
259250
argv.directory,
260251
argv.dry_run,
261252
argv.output,
262253
argv.output_format,
263254
argv.verbose,
264-
argv.log_format,
265-
argv.project_name,
266255
tool_result_files_map,
267256
argv.path_include,
268257
argv.path_exclude,

src/codemodder/logging.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,6 @@ def configure_logger(
8585

8686
logging.basicConfig(
8787
format="%(message)s",
88-
level=log_level,
8988
handlers=handlers,
9089
)
90+
logger.setLevel(log_level)

tests/test_regex_transformer.py

Lines changed: 32 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -6,40 +6,42 @@
66
)
77
from codemodder.context import CodemodExecutionContext
88
from codemodder.file_context import FileContext
9+
from codemodder.logging import OutputFormat, configure_logger
910
from codemodder.semgrep import SemgrepResult
1011

1112

1213
def test_transformer_no_change(mocker, caplog, tmp_path_factory):
13-
caplog.set_level(logging.DEBUG)
14-
base_dir = tmp_path_factory.mktemp("foo")
15-
code = base_dir / "code.py"
16-
code.write_text("# Something that won't match")
17-
18-
file_context = FileContext(
19-
base_dir,
20-
code,
21-
)
22-
execution_context = CodemodExecutionContext(
23-
directory=base_dir,
24-
dry_run=True,
25-
verbose=False,
26-
registry=mocker.MagicMock(),
27-
providers=mocker.MagicMock(),
28-
repo_manager=mocker.MagicMock(),
29-
path_include=[],
30-
path_exclude=[],
31-
)
32-
pipeline = RegexTransformerPipeline(
33-
pattern=r"hello", replacement="bye", change_description="testing"
34-
)
35-
36-
changeset = pipeline.apply(
37-
context=execution_context,
38-
file_context=file_context,
39-
results=None,
40-
)
41-
assert changeset is None
42-
assert "No changes produced for" in caplog.text
14+
configure_logger(True, OutputFormat.HUMAN)
15+
with caplog.at_level(logging.DEBUG):
16+
base_dir = tmp_path_factory.mktemp("foo")
17+
code = base_dir / "code.py"
18+
code.write_text("# Something that won't match")
19+
20+
file_context = FileContext(
21+
base_dir,
22+
code,
23+
)
24+
execution_context = CodemodExecutionContext(
25+
directory=base_dir,
26+
dry_run=True,
27+
verbose=False,
28+
registry=mocker.MagicMock(),
29+
providers=mocker.MagicMock(),
30+
repo_manager=mocker.MagicMock(),
31+
path_include=[],
32+
path_exclude=[],
33+
)
34+
pipeline = RegexTransformerPipeline(
35+
pattern=r"hello", replacement="bye", change_description="testing"
36+
)
37+
38+
changeset = pipeline.apply(
39+
context=execution_context,
40+
file_context=file_context,
41+
results=None,
42+
)
43+
assert changeset is None
44+
assert "No changes produced for" in caplog.text
4345

4446

4547
def test_transformer(mocker, tmp_path_factory):

0 commit comments

Comments
 (0)