From dafa8fc74e3443a507213379aaaa2c3b9fb166cc Mon Sep 17 00:00:00 2001 From: Christian Heller Date: Wed, 24 Sep 2025 08:38:17 +0200 Subject: [PATCH] Generalize logging to all ClientWindows, use dedicated directory. --- ircplom/client_tui.py | 20 ++++++++++++-------- ircplom/tui_base.py | 6 +++++- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/ircplom/client_tui.py b/ircplom/client_tui.py index 70dee35..26ea085 100644 --- a/ircplom/client_tui.py +++ b/ircplom/client_tui.py @@ -2,6 +2,8 @@ # built-ins from enum import Enum, auto from getpass import getuser +from os import makedirs +from os.path import exists from typing import Any, Callable, Optional, Sequence # ourselves from ircplom.tui_base import (BaseTui, PromptWidget, TuiEvent, Window, @@ -24,6 +26,8 @@ _LOG_PREFIX_SERVER = '$' _LOG_PREFIX_OUT = '>' _LOG_PREFIX_IN = '<' +_PATH_LOGS = 'logs' + class _LogScope(Enum): 'Where log messages should go.' @@ -40,6 +44,14 @@ class _ClientWindow(Window, ClientQueueMixin): super().__init__(**kwargs) self._title = f'{self.client_id} :DEBUG' + def log(self, msg: str) -> None: + super().log(msg) + if not exists(_PATH_LOGS): + makedirs(_PATH_LOGS) + with open(f'{_PATH_LOGS}/{self._title}.txt', 'a', encoding='utf8' + ) as f: + f.write(msg + '\n') + def _send_msg(self, verb: str, params: tuple[str, ...]) -> None: self._client_trigger('send_w_params_tuple', verb=verb, params=params) @@ -417,14 +429,6 @@ class ClientTui(BaseTui): scope, kwargs.get('target', '')) return super()._log_target_wins(**kwargs) - def log(self, msg: str, **kwargs) -> tuple[tuple[int, ...], str]: - win_ids, logged_msg = super().log(msg, **kwargs) - if kwargs.get('scope', None) == _LogScope.DEBUG\ - and kwargs['prefix'] in {_LOG_PREFIX_IN, _LOG_PREFIX_OUT}: - with open(f'{kwargs["client_id"]}.log', 'a', encoding='utf8') as f: - f.write(f'{logged_msg}\n') - return win_ids, logged_msg - def for_client_do(self, client_id: str, todo: str, **kwargs) -> None: 'Forward todo to appropriate _ClientWindowsManager.' if client_id not in self._client_mngrs: diff --git a/ircplom/tui_base.py b/ircplom/tui_base.py index 7fa0e78..f6a3f96 100644 --- a/ircplom/tui_base.py +++ b/ircplom/tui_base.py @@ -333,6 +333,10 @@ class Window: if hasattr(self._term, 'size'): self.set_geometry() + def log(self, msg: str) -> None: + 'Append msg to .history.' + self.history.append(msg) + def taint(self) -> None: 'Declare all widgets as in need of re-drawing.' self.history.taint() @@ -449,7 +453,7 @@ class BaseTui(QueueMixin): affected_win_indices = [] for win in self._log_target_wins(**kwargs): affected_win_indices += [win.idx] - win.history.append(msg) + win.log(msg) if win != self.window: self._status_line.taint() return tuple(affected_win_indices), msg -- 2.30.2