home · contact · privacy
Dataclass classes pylint complains about having too few public methods. master
authorChristian Heller <c.heller@plomlompom.de>
Mon, 4 Aug 2025 04:55:41 +0000 (06:55 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Mon, 4 Aug 2025 04:55:41 +0000 (06:55 +0200)
ircplom/events.py
ircplom/irc_conn.py
ircplom/tui.py

index 339b1fc8bbe932efac3f31410c8326c2504838c8..e06ce344c4d3b6d4a3777f86bb18ea7c95e41dfa 100644 (file)
@@ -1,14 +1,17 @@
 'Event system with event loop.'
 from abc import abstractmethod, ABC
 'Event system with event loop.'
 from abc import abstractmethod, ABC
+from dataclasses import dataclass
 from queue import SimpleQueue, Empty as QueueEmpty
 from threading import Thread
 from typing import Any, Iterator, Literal, Self
 
 
 from queue import SimpleQueue, Empty as QueueEmpty
 from threading import Thread
 from typing import Any, Iterator, Literal, Self
 
 
+@dataclass
 class Event:
     'Communication unit between threads.'
 
 
 class Event:
     'Communication unit between threads.'
 
 
+@dataclass
 class AffectiveEvent(Event, ABC):
     'For Events that are to affect other objects.'
 
 class AffectiveEvent(Event, ABC):
     'For Events that are to affect other objects.'
 
@@ -17,32 +20,30 @@ class AffectiveEvent(Event, ABC):
         'To be run by main loop on target.'
 
 
         'To be run by main loop on target.'
 
 
+@dataclass
 class PayloadMixin:
     'Extends with .payload= passed as first argument.'
 class PayloadMixin:
     'Extends with .payload= passed as first argument.'
-
-    def __init__(self, payload, **kwargs) -> None:
-        super().__init__(**kwargs)
-        self.payload = payload
+    payload: Any
 
 
 
 
+@dataclass
 class ExceptionEvent(Event, PayloadMixin):
     'To deliver Exception to main loop for handling.'
     payload: Exception
 
 
 class ExceptionEvent(Event, PayloadMixin):
     'To deliver Exception to main loop for handling.'
     payload: Exception
 
 
+@dataclass
 class QuitEvent(Event):
     'To break main loop towards.'
 
 
 class QuitEvent(Event):
     'To break main loop towards.'
 
 
+@dataclass
 class QueueMixin:
 class QueueMixin:
-    'Adds SimpleQueue addressable via ._put(Event).'
-
-    def __init__(self, q_out: SimpleQueue, **kwargs) -> None:
-        self._q_out = q_out
-        super().__init__(**kwargs)
+    'Adds SimpleQueue .q_out addressable via ._put(Event).'
+    q_out: SimpleQueue
 
     def _put(self, event: Event) -> None:
 
     def _put(self, event: Event) -> None:
-        self._q_out.put(event)
+        self.q_out.put(event)
 
 
 class Loop(QueueMixin):
 
 
 class Loop(QueueMixin):
index 31466936f780089a5363e4dca7a8e3dc95feb1cc..d2ba8582a8ee508c6b3518cee9fe16a3f1d7a271 100644 (file)
@@ -129,14 +129,13 @@ class IrcMessage:
         return self._raw
 
 
         return self._raw
 
 
+@dataclass
 class ClientIdMixin:
     'Collects a Client\'s ID at .client_id.'
 class ClientIdMixin:
     'Collects a Client\'s ID at .client_id.'
-
-    def __init__(self, client_id: UUID, **kwargs) -> None:
-        super().__init__(**kwargs)
-        self.client_id = client_id
+    client_id: UUID
 
 
 
 
+@dataclass
 class NewClientEvent(AffectiveEvent, PayloadMixin):
     'Put Client .payload into ClientsDb target.'
     payload: 'Client'
 class NewClientEvent(AffectiveEvent, PayloadMixin):
     'Put Client .payload into ClientsDb target.'
     payload: 'Client'
@@ -145,10 +144,12 @@ class NewClientEvent(AffectiveEvent, PayloadMixin):
         target[self.payload.id_] = self.payload
 
 
         target[self.payload.id_] = self.payload
 
 
+@dataclass
 class ClientEvent(AffectiveEvent, ClientIdMixin):
     'To affect Client identified by ClientIdMixin.'
 
 
 class ClientEvent(AffectiveEvent, ClientIdMixin):
     'To affect Client identified by ClientIdMixin.'
 
 
+@dataclass
 class _ConnectedEvent(ClientEvent):
 
     def affect(self, target: 'Client') -> None:
 class _ConnectedEvent(ClientEvent):
 
     def affect(self, target: 'Client') -> None:
@@ -159,6 +160,7 @@ class _ConnectedEvent(ClientEvent):
         target.send(IrcMessage(verb='NICK', params=(target.nickname,)))
 
 
         target.send(IrcMessage(verb='NICK', params=(target.nickname,)))
 
 
+@dataclass
 class InitReconnectEvent(ClientEvent):
     'To trigger re-opening of connection.'
 
 class InitReconnectEvent(ClientEvent):
     'To trigger re-opening of connection.'
 
@@ -170,6 +172,7 @@ class InitReconnectEvent(ClientEvent):
             target.start_connecting()
 
 
             target.start_connecting()
 
 
+@dataclass
 class SendEvent(ClientEvent, PayloadMixin):
     'To trigger sending of payload to server.'
     payload: IrcMessage
 class SendEvent(ClientEvent, PayloadMixin):
     'To trigger sending of payload to server.'
     payload: IrcMessage
@@ -182,6 +185,7 @@ class SendEvent(ClientEvent, PayloadMixin):
         target.send(msg=self.payload, chat=self._chat)
 
 
         target.send(msg=self.payload, chat=self._chat)
 
 
+@dataclass
 class ClientQueueMixin(QueueMixin):
     'To QueueMixin adds _cput to extend ._put with client_id= setting.'
     client_id_name = 'id_'
 class ClientQueueMixin(QueueMixin):
     'To QueueMixin adds _cput to extend ._put with client_id= setting.'
     client_id_name = 'id_'
@@ -241,7 +245,7 @@ class Client(ABC, ClientQueueMixin):
                 self._socket.settimeout(_TIMEOUT_RECV_LOOP)
                 self.assumed_open = True
                 self._recv_loop = Loop(iterator=self._read_lines(),
                 self._socket.settimeout(_TIMEOUT_RECV_LOOP)
                 self.assumed_open = True
                 self._recv_loop = Loop(iterator=self._read_lines(),
-                                       q_out=self._q_out)
+                                       q_out=self.q_out)
                 self._cput(_ConnectedEvent)
             except Exception as e:  # pylint: disable=broad-exception-caught
                 self._put(ExceptionEvent(e))
                 self._cput(_ConnectedEvent)
             except Exception as e:  # pylint: disable=broad-exception-caught
                 self._put(ExceptionEvent(e))
@@ -366,6 +370,7 @@ class Client(ABC, ClientQueueMixin):
                     bytes_total = b''
 
 
                     bytes_total = b''
 
 
+@dataclass
 class _RecvEvent(ClientEvent, PayloadMixin):
     payload: str
 
 class _RecvEvent(ClientEvent, PayloadMixin):
     payload: str
 
index 9888fa60ae2b7d67696b1b8d5325da798fa8332a..f0244a23f7f8708704ee5cafcb2eddfa8c6d9f27 100644 (file)
@@ -3,6 +3,7 @@
 from abc import ABC, abstractmethod
 from base64 import b64decode
 from contextlib import contextmanager
 from abc import ABC, abstractmethod
 from base64 import b64decode
 from contextlib import contextmanager
+from dataclasses import dataclass
 from inspect import _empty as inspect_empty, signature, stack
 from signal import SIGWINCH, signal
 from typing import Callable, Generator, Iterator, NamedTuple, Optional
 from inspect import _empty as inspect_empty, signature, stack
 from signal import SIGWINCH, signal
 from typing import Callable, Generator, Iterator, NamedTuple, Optional
@@ -50,6 +51,7 @@ _CMD_SHORTCUTS = {
 }
 
 
 }
 
 
+@dataclass
 class TuiEvent(AffectiveEvent):
     'To affect TUI, and trigger flushed .draw_tainted on it.'
 
 class TuiEvent(AffectiveEvent):
     'To affect TUI, and trigger flushed .draw_tainted on it.'
 
@@ -58,6 +60,7 @@ class TuiEvent(AffectiveEvent):
         target.term.flush()
 
 
         target.term.flush()
 
 
+@dataclass
 class _SetScreenEvent(TuiEvent):
 
     def affect(self, target: 'Tui') -> None:
 class _SetScreenEvent(TuiEvent):
 
     def affect(self, target: 'Tui') -> None:
@@ -367,6 +370,7 @@ class _Window(_Widget):
             widget.draw()
 
 
             widget.draw()
 
 
+@dataclass
 class _KeyboardEvent(TuiEvent, PayloadMixin):
     payload: str
 
 class _KeyboardEvent(TuiEvent, PayloadMixin):
     payload: str
 
@@ -434,7 +438,7 @@ class Tui(QueueMixin):
     def _new_client_window(self, client_id: UUID, chat: str = ''
                            ) -> '_ClientWindow':
         new_idx = len(self.windows)
     def _new_client_window(self, client_id: UUID, chat: str = ''
                            ) -> '_ClientWindow':
         new_idx = len(self.windows)
-        win = _ClientWindow(idx=new_idx, term=self.term, q_out=self._q_out,
+        win = _ClientWindow(idx=new_idx, term=self.term, q_out=self.q_out,
                             client_id=client_id, chat=chat)
         self.windows += [win]
         self._switch_window(new_idx)
                             client_id=client_id, chat=chat)
         self.windows += [win]
         self._switch_window(new_idx)
@@ -475,7 +479,7 @@ class Tui(QueueMixin):
                      ) -> None:
         'Create Client and pass it via NewClientEvent.'
         self._put(NewClientEvent(
                      ) -> None:
         'Create Client and pass it via NewClientEvent.'
         self._put(NewClientEvent(
-            _ClientKnowingTui(q_out=self._q_out, hostname=hostname,
+            _ClientKnowingTui(q_out=self.q_out, hostname=hostname,
                               nickname=nickname, realname=realname)))
 
     def cmd__prompt_enter(self) -> None:
                               nickname=nickname, realname=realname)))
 
     def cmd__prompt_enter(self) -> None:
@@ -552,7 +556,7 @@ class Terminal(QueueMixin):
         with (self._blessed.raw(),
               self._blessed.fullscreen(),
               self._blessed.hidden_cursor(),
         with (self._blessed.raw(),
               self._blessed.fullscreen(),
               self._blessed.hidden_cursor(),
-              Loop(iterator=self._get_keypresses(), q_out=self._q_out)):
+              Loop(iterator=self._get_keypresses(), q_out=self.q_out)):
             yield self
 
     @property
             yield self
 
     @property
@@ -675,13 +679,12 @@ class _ClientWindow(_Window, ClientQueueMixin):
                    payload=IrcMessage(verb='PRIVMSG', params=(target, msg)))
 
 
                    payload=IrcMessage(verb='PRIVMSG', params=(target, msg)))
 
 
+@dataclass
 class _ClientWindowEvent(TuiEvent, ClientIdMixin):
 class _ClientWindowEvent(TuiEvent, ClientIdMixin):
-
-    def __init__(self, chat: str = '', **kwargs) -> None:
-        self.chat = chat
-        super().__init__(**kwargs)
+    chat: str = ''
 
 
 
 
+@dataclass
 class _ClientLogEvent(_ClientWindowEvent, PayloadMixin):
     payload: str
 
 class _ClientLogEvent(_ClientWindowEvent, PayloadMixin):
     payload: str
 
@@ -695,6 +698,7 @@ class _ClientLogEvent(_ClientWindowEvent, PayloadMixin):
         super().affect(target)
 
 
         super().affect(target)
 
 
+@dataclass
 class _ClientPromptEvent(_ClientWindowEvent, PayloadMixin):
     payload: tuple[str, str]
 
 class _ClientPromptEvent(_ClientWindowEvent, PayloadMixin):
     payload: tuple[str, str]