From 14b499637ba5c36b2ac442c4a10a362b2c7da1bb Mon Sep 17 00:00:00 2001 From: Siarhei Siniak Date: Sun, 10 Nov 2024 21:49:33 +0300 Subject: [PATCH] [~] Refactor --- dotfiles/.local/bin/commands | 49 +++++++++++++++++++++++++----------- 1 file changed, 34 insertions(+), 15 deletions(-) diff --git a/dotfiles/.local/bin/commands b/dotfiles/.local/bin/commands index 8547ca4..9298d2e 100755 --- a/dotfiles/.local/bin/commands +++ b/dotfiles/.local/bin/commands @@ -23,7 +23,7 @@ import tempfile import time import traceback -from typing import (Literal, Optional, TypedDict, Callable, Generator, TypeAlias,) +from typing import (Literal, Optional, TypedDict, Callable, Generator, TypeAlias, Any,) logger = logging.getLogger(__name__) @@ -258,8 +258,8 @@ def memory_stats() -> memory_stats_t.res_t: raise NotImplementedError def chrome( - argv -): + argv: list[str] +) -> int: assert isinstance(argv, list) and all([isinstance(o, str) for o in argv]) parser = optparse.OptionParser() parser.add_option( @@ -281,7 +281,7 @@ def chrome( #assert os.path.exists(options.user_data_dir) if sys.platform == 'linux': - subprocess.check_call([ + return subprocess.check_call([ 'google-chrome-stable', '--enable-features=useOzonePlatform', '--ozone-platform=wayland', @@ -292,7 +292,7 @@ def chrome( else: raise NotImplementedError -def eternal_oom(argv): +def eternal_oom(argv: list[str]) -> None: import signal import re import time @@ -412,12 +412,15 @@ def eternal_oom(argv): ) return + cpu_count = os.cpu_count() + assert isinstance(cpu_count, int) + if options.period is None: options.period = 1 if options.memory_limit is None: options.memory_limit = 3 * 1024 * 1024 if options.cpu_limit is None: - options.cpu_limit = 0.6 * os.cpu_count() + options.cpu_limit = 0.6 * cpu_count if options.cpu_wait is None: options.cpu_wait = 10 if options.mean_size is None: @@ -431,24 +434,40 @@ def eternal_oom(argv): and options.memory_limit > 512 * 1024 assert isinstance(options.cpu_limit, float) \ - and options.cpu_limit > 0.2 * os.cpu_count() and \ - options.cpu_limit < os.cpu_count() * 0.95 + and options.cpu_limit > 0.2 * cpu_count and \ + options.cpu_limit < cpu_count * 0.95 assert options.period >= 1 assert options.cpu_wait >= 10 assert options.mean_size >= 16 - def pandas_data_frame(lines, groups_regex, header_regex, extra_columns): - header = re.compile(header_regex).search(lines[0]).groups() - rows = [ - re.compile(groups_regex).search(row).groups() - for row in lines[1:] - ] - columns = { + def pandas_data_frame( + lines: list[str], + groups_regex: re.Pattern[str], + header_regex: re.Pattern[str], + extra_columns: dict[ + str, + Callable[ + [dict[str, str]], + Any + ] + ], + ) -> dict[str, list[Any]]: + header_match = re.compile(header_regex).search(lines[0]) + assert not header_match is None + header = header_match.groups() + rows = [] + for line in lines[1:]: + row_match = re.compile(groups_regex).search(line) + assert not row_match is None + rows.append(row_match.groups()) + + columns: dict[str, list[Any]] = { column: [] for column in header } + for row in rows: for value, column in zip(row, header): columns[column].append(value)