From: Christian Heller Date: Sun, 21 Sep 2025 14:58:33 +0000 (+0200) Subject: Use exception handling on lack of matching server message parser. X-Git-Url: https://plomlompom.com/repos/?a=commitdiff_plain;h=f974eec4f209ad54b3d1154b2e0d006eab356f65;p=ircplom Use exception handling on lack of matching server message parser. --- diff --git a/ircplom/client.py b/ircplom/client.py index dec3d2e..e64b4ca 100644 --- a/ircplom/client.py +++ b/ircplom/client.py @@ -21,7 +21,11 @@ _NAMES_DESIRED_SERVER_CAPS = ('sasl',) class SendFail(BaseException): - pass + 'When Client.send fails.' + + +class ImplementationFail(BaseException): + 'When no matching parser found for server message.' class AutoAttrMixin: @@ -846,8 +850,7 @@ class Client(ABC, ClientQueueMixin): ret = result break if '_verb' not in ret: - self._log(f'PLEASE IMPLEMENT HANDLER FOR: {msg.raw}', alert=True) - return + raise ImplementationFail(f'No handler implemented for: {msg.raw}') for n_u_h in ret['_nickuserhosts']: # update, turn into proper users if (id_ := self.db.users.id_for_nickuserhost( n_u_h, allow_none=True, updating=True)): diff --git a/ircplom/client_tui.py b/ircplom/client_tui.py index ad21878..ec4d0c2 100644 --- a/ircplom/client_tui.py +++ b/ircplom/client_tui.py @@ -7,8 +7,8 @@ from ircplom.tui_base import (BaseTui, PromptWidget, TuiEvent, Window, CMD_SHORTCUTS) from ircplom.client import ( AutoAttrMixin, Channel, Client, ClientQueueMixin, Dict, DictItem, - IrcConnSetup, LogScope, NewClientEvent, NickUserHost, SendFail, - ServerCapability, SharedClientDbFields, User) + ImplementationFail, IrcConnSetup, LogScope, NewClientEvent, + NickUserHost, SendFail, ServerCapability, SharedClientDbFields, User) from ircplom.irc_conn import IrcMessage CMD_SHORTCUTS['disconnect'] = 'window.disconnect' @@ -500,7 +500,10 @@ class ClientKnowingTui(Client): def handle_msg(self, msg: IrcMessage) -> None: self._log(msg.raw, scope=LogScope.RAW, out=False) - super().handle_msg(msg) + try: + super().handle_msg(msg) + except ImplementationFail as e: + self._log(str(e), scope=LogScope.DEBUG, alert=True) def _log(self, msg: str, scope: Optional[LogScope] = None, **kwargs ) -> None: diff --git a/test.txt b/test.txt index ec08fe5..583407b 100644 --- a/test.txt +++ b/test.txt @@ -194,7 +194,7 @@ # test lack of implementation 0:2 < foo bar baz -1,2 !$ PLEASE IMPLEMENT HANDLER FOR: foo bar baz +1,2 !$ No handler implemented for: foo bar baz # test recoverable 432 > /nick @foo