From: Christian Heller Date: Tue, 5 Aug 2025 11:43:09 +0000 (+0200) Subject: Some more refactoring. X-Git-Url: https://plomlompom.com/repos/booking/%7B%7B%20web_path%20%7D%7D/condition?a=commitdiff_plain;h=refs%2Fheads%2Fmaster;p=ircplom Some more refactoring. --- diff --git a/ircplom.py b/ircplom.py index 007dd05..eb70cda 100755 --- a/ircplom.py +++ b/ircplom.py @@ -12,8 +12,8 @@ def main_loop() -> None: q_events: SimpleQueue = SimpleQueue() clients_db: ClientsDb = {} try: - with Terminal(q_out=q_events).setup() as term: - tui = ClientTui(q_out=q_events, term=term) + with Terminal(_q_out=q_events).setup() as term: + tui = ClientTui(_q_out=q_events, term=term) while True: event = q_events.get() if isinstance(event, QuitEvent): diff --git a/ircplom/client.py b/ircplom/client.py index 5453afe..e2d3859 100644 --- a/ircplom/client.py +++ b/ircplom/client.py @@ -34,11 +34,11 @@ class ClientEvent(AffectiveEvent, ClientIdMixin): @dataclass class _IrcConnection(BaseIrcConnection, ClientIdMixin): - hostname: InitVar[str] - port: InitVar[int] + hostname: InitVar[str] # needed by BaseIrcConnection, but not desired as + port: InitVar[int] # dataclass fields, only for __post_init__ call def __post_init__(self, hostname, port, **kwargs) -> None: - super().__init__(hostname=hostname, port=port, q_out=self.q_out, + super().__init__(hostname=hostname, port=port, _q_out=self._q_out, **kwargs) def _make_recv_event(self, msg: IrcMessage) -> ClientEvent: @@ -48,13 +48,11 @@ class _IrcConnection(BaseIrcConnection, ClientIdMixin): @dataclass -class ClientQueueMixin(QueueMixin): +class ClientQueueMixin(QueueMixin, ClientIdMixin): 'To QueueMixin adds _cput to extend ._put with client_id= setting.' - client_id_name = 'id_' def _cput(self, event_class, **kwargs) -> None: - self._put(event_class(client_id=getattr(self, self.client_id_name), - **kwargs)) + self._put(event_class(client_id=self.client_id, **kwargs)) def _cputs(self, method_to_call: str, **kwargs) -> None: self._cput(ClientEvent.make_subtype(method_to_call, **kwargs)) @@ -176,12 +174,12 @@ class Client(ABC, ClientQueueMixin): conn: Optional[_IrcConnection] = None def __init__(self, conn_setup: IrcConnSetup, **kwargs) -> None: - super().__init__(**kwargs) self._caps = _CapsManager(self.send) self.conn_setup = conn_setup if self.conn_setup.port <= 0: self.conn_setup.port = PORT_SSL - self.id_ = self.conn_setup.hostname + self.client_id = self.conn_setup.hostname + super().__init__(client_id=self.client_id, **kwargs) self.log = Logger(self._log) self.update_login(nick_confirmed=False, nickname=self.conn_setup.nickname) @@ -198,8 +196,8 @@ class Client(ABC, ClientQueueMixin): 'not re-connecting since already connected') self.conn = _IrcConnection(hostname=self.conn_setup.hostname, port=self.conn_setup.port, - q_out=self.q_out, - client_id=self.id_) + _q_out=self._q_out, + client_id=self.client_id) self._cputs('on_connect') except IrcConnAbortException as e: self.log.alert(str(e)) @@ -305,4 +303,4 @@ class NewClientEvent(AffectiveEvent): payload: Client def affect(self, target: ClientsDb) -> None: - target[self.payload.id_] = self.payload + target[self.payload.client_id] = self.payload diff --git a/ircplom/client_tui.py b/ircplom/client_tui.py index 262a2c9..366a726 100644 --- a/ircplom/client_tui.py +++ b/ircplom/client_tui.py @@ -34,18 +34,12 @@ class _ClientPromptWidget(PromptWidget): other.prefix = self._prefix +@dataclass class _ClientWindow(Window, ClientQueueMixin): - client_id_name = 'client_id' prompt: _ClientPromptWidget - def __init__(self, - parent: 'ClientTui', - client_id: str, - chat: str = '', - **kwargs - ) -> None: + def __init__(self, parent: 'ClientTui', chat: str = '', **kwargs) -> None: self._parent = parent - self.client_id = client_id self.chat = chat super().__init__(**kwargs) @@ -107,7 +101,7 @@ class ClientTui(BaseTui): win_class = (_PrivmsgWindow if (chat and chat[0].isalpha()) else _ClientWindow) win = win_class(parent=self, idx=new_idx, term=self.term, - q_out=self.q_out, client_id=client_id, chat=chat) + _q_out=self._q_out, client_id=client_id, chat=chat) self.windows += [win] self._switch_window(new_idx) return win @@ -163,7 +157,7 @@ class ClientTui(BaseTui): realname = nickname self._put(NewClientEvent( _ClientKnowingTui( - q_out=self.q_out, + _q_out=self._q_out, conn_setup=IrcConnSetup( hostname, port, nickname, realname, password)))) diff --git a/ircplom/events.py b/ircplom/events.py index 7e96a50..0da7574 100644 --- a/ircplom/events.py +++ b/ircplom/events.py @@ -48,11 +48,11 @@ class QuitEvent(Event): @dataclass class QueueMixin: - 'Adds SimpleQueue .q_out addressable via ._put(Event).' - q_out: SimpleQueue + 'Adds SimpleQueue addressable via ._put(Event).' + _q_out: SimpleQueue def _put(self, event: Event) -> None: - self.q_out.put(event) + self._q_out.put(event) class Loop(QueueMixin): diff --git a/ircplom/irc_conn.py b/ircplom/irc_conn.py index 45ebc47..80510b6 100644 --- a/ircplom/irc_conn.py +++ b/ircplom/irc_conn.py @@ -141,7 +141,7 @@ class BaseIrcConnection(QueueMixin, ABC): except (TimeoutError, socket_gaierror) as e: raise IrcConnAbortException(e) from e self._socket.settimeout(_TIMEOUT_RECV_LOOP) - self._recv_loop = Loop(iterator=self._read_lines(), q_out=self.q_out) + self._recv_loop = Loop(iterator=self._read_lines(), _q_out=self._q_out) def close(self) -> None: 'Stop recv loop and close socket.' diff --git a/ircplom/tui_base.py b/ircplom/tui_base.py index 9685c13..ca427a9 100644 --- a/ircplom/tui_base.py +++ b/ircplom/tui_base.py @@ -510,7 +510,7 @@ class Terminal(QueueMixin): 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