home · contact · privacy
Generalize logging to all ClientWindows, use dedicated directory.
authorChristian Heller <c.heller@plomlompom.de>
Wed, 24 Sep 2025 06:38:17 +0000 (08:38 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Wed, 24 Sep 2025 06:38:17 +0000 (08:38 +0200)
ircplom/client_tui.py
ircplom/tui_base.py

index 70dee35f01e47789651311ae36b0a5812d75c8c4..26ea085da1a781820a3fa821269bb31adcacd82e 100644 (file)
@@ -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:
index 7fa0e78a203c104ee6f2ec2705305219cdb887a7..f6a3f9697fb0b896ba2b539026610070b65de6f9 100644 (file)
@@ -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