Skip to content

Commit 07f63c2

Browse files
jnooree2bndy5
andauthored
perf: use io.StringIO instead tempdir/tempfile (#94)
Co-authored-by: Brendan <[email protected]>
1 parent 3970d38 commit 07f63c2

File tree

2 files changed

+13
-16
lines changed

2 files changed

+13
-16
lines changed

cpp_linter/clang_tools/__init__.py

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,12 @@
33
from pathlib import Path, PurePath
44
import subprocess
55
import sys
6-
from tempfile import TemporaryDirectory
76
from textwrap import indent
87
from typing import Optional, List, Dict, Tuple
98
import shutil
109

1110
from ..common_fs import FileObj
12-
from ..loggers import start_log_group, end_log_group, worker_log_file_init, logger
11+
from ..loggers import start_log_group, end_log_group, worker_log_init, logger
1312
from .clang_tidy import run_clang_tidy, TidyAdvice
1413
from .clang_format import run_clang_format, FormatAdvice
1514

@@ -36,7 +35,6 @@ def assemble_version_exec(tool_name: str, specified_version: str) -> Optional[st
3635

3736
def _run_on_single_file(
3837
file: FileObj,
39-
temp_dir: str,
4038
log_lvl: int,
4139
tidy_cmd,
4240
checks,
@@ -49,7 +47,7 @@ def _run_on_single_file(
4947
style,
5048
format_review,
5149
):
52-
log_file = worker_log_file_init(temp_dir, log_lvl)
50+
log_stream = worker_log_init(log_lvl)
5351

5452
tidy_note = None
5553
if tidy_cmd is not None:
@@ -70,7 +68,7 @@ def _run_on_single_file(
7068
format_cmd, file, style, lines_changed_only, format_review
7169
)
7270

73-
return file.name, log_file, tidy_note, format_advice
71+
return file.name, log_stream.getvalue(), tidy_note, format_advice
7472

7573

7674
def capture_clang_tools_output(
@@ -131,13 +129,12 @@ def show_tool_version_output(cmd: str): # show version output for executable us
131129
if db_path.exists():
132130
db_json = json.loads(db_path.read_text(encoding="utf-8"))
133131

134-
with TemporaryDirectory() as temp_dir, ProcessPoolExecutor(num_workers) as executor:
132+
with ProcessPoolExecutor(num_workers) as executor:
135133
log_lvl = logger.getEffectiveLevel()
136134
futures = [
137135
executor.submit(
138136
_run_on_single_file,
139137
file,
140-
temp_dir=temp_dir,
141138
log_lvl=log_lvl,
142139
tidy_cmd=tidy_cmd,
143140
checks=checks,
@@ -157,10 +154,10 @@ def show_tool_version_output(cmd: str): # show version output for executable us
157154
format_advice_map: Dict[str, Optional[FormatAdvice]] = {}
158155
tidy_notes_map: Dict[str, Optional[TidyAdvice]] = {}
159156
for future in as_completed(futures):
160-
file, log_file, note, advice = future.result()
157+
file, logs, note, advice = future.result()
161158

162159
start_log_group(f"Performing checkup on {file}")
163-
sys.stdout.write(Path(log_file).read_text())
160+
sys.stdout.write(logs)
164161
end_log_group()
165162

166163
format_advice_map[file] = advice

cpp_linter/loggers.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import logging
22
import os
3-
from tempfile import NamedTemporaryFile
3+
import io
44

55
from requests import Response
66

@@ -57,8 +57,8 @@ def log_response_msg(response: Response):
5757
)
5858

5959

60-
def worker_log_file_init(temp_dir: str, log_lvl: int):
61-
log_file = NamedTemporaryFile("w", dir=temp_dir, delete=False)
60+
def worker_log_init(log_lvl: int):
61+
log_stream = io.StringIO()
6262

6363
logger.handlers.clear()
6464
logger.propagate = False
@@ -68,11 +68,11 @@ def worker_log_file_init(temp_dir: str, log_lvl: int):
6868
FOUND_RICH_LIB and "CPP_LINTER_PYTEST_NO_RICH" not in os.environ
6969
): # pragma: no cover
7070
console = get_console()
71-
console.file = log_file
71+
console.file = log_stream
7272
handler = RichHandler(show_time=False, console=console)
7373
handler.setFormatter(logging.Formatter("%(name)s: %(message)s"))
7474
else:
75-
handler = logging.StreamHandler(log_file)
75+
handler = logging.StreamHandler(log_stream)
7676
handler.setFormatter(logging.Formatter(logging.BASIC_FORMAT))
7777
logger.addHandler(handler)
7878
# Windows does not copy log level to subprocess.
@@ -82,8 +82,8 @@ def worker_log_file_init(temp_dir: str, log_lvl: int):
8282
## uncomment the following if log_commander is needed in isolated threads
8383
# log_commander.handlers.clear()
8484
# log_commander.propagate = False
85-
# console_handler = logging.StreamHandler(log_file)
85+
# console_handler = logging.StreamHandler(log_stream)
8686
# console_handler.setFormatter(logging.Formatter("%(message)s"))
8787
# log_commander.addHandler(console_handler)
8888

89-
return log_file.name
89+
return log_stream

0 commit comments

Comments
 (0)