From fe5f7a2f1e5c34b2cc4a8bd6605603d5c2757665 Mon Sep 17 00:00:00 2001 From: Christian Heller Date: Wed, 3 Sep 2025 14:40:50 +0200 Subject: [PATCH] Reorganize task name parsing towards greater flexibility. --- ircplom/client.py | 20 +++--- ircplom/msg_parse_expectations.py | 106 +++++++++++++++--------------- 2 files changed, 64 insertions(+), 62 deletions(-) diff --git a/ircplom/client.py b/ircplom/client.py index f919262..6bd924d 100644 --- a/ircplom/client.py +++ b/ircplom/client.py @@ -753,16 +753,18 @@ class Client(ABC, ClientQueueMixin): self._log(f'PLEASE IMPLEMENT HANDLER FOR: {msg.raw}') return for task, tok_names in ret['_tasks'].items(): - for tok_name in tok_names: - if task == 'set_db_attr': - setattr(self._db, tok_name, ret[tok_name]) - elif task == 'set_me_attr': - setattr(self._db.users['me'], tok_name, ret[tok_name]) - elif task == 'set_topic_attr': - setattr(self._db.channels[ret['CHAN']].topic, - tok_name, ret[tok_name]) - elif task == 'set_user': + task_verb, target_name = task.split('_') + if task_verb == 'set' and target_name == 'user': + for tok_name in tok_names: self._db.user_id(ret[tok_name]) + elif task_verb == 'setattr': + target = self._db + if target_name == 'me': + target = target.users[target_name] + elif target_name == 'topic': + target = target.channels[ret['CHAN']].topic + for tok_name in tok_names: + setattr(target, tok_name, ret[tok_name]) if ret['verb'] == '005': # RPL_ISUPPORT for item in ret['isupport']: if item[0] == '-': diff --git a/ircplom/msg_parse_expectations.py b/ircplom/msg_parse_expectations.py index ecdc637..86c7715 100644 --- a/ircplom/msg_parse_expectations.py +++ b/ircplom/msg_parse_expectations.py @@ -30,19 +30,19 @@ MSG_EXPECTATIONS: list[_MsgParseExpectation] = [] MSG_EXPECTATIONS += [ _MsgParseExpectation(MsgTok.SERVER, '001', # RPL_WELCOME - ((MsgTok.NICKNAME, 'set_me_attr:nick'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), MsgTok.ANY)), _MsgParseExpectation(MsgTok.SERVER, '002', # RPL_YOURHOST - ((MsgTok.NICKNAME, 'set_me_attr:nick'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), MsgTok.ANY)), _MsgParseExpectation(MsgTok.SERVER, '003', # RPL_CREATED - ((MsgTok.NICKNAME, 'set_me_attr:nick'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), MsgTok.ANY)), _MsgParseExpectation(MsgTok.SERVER, '004', # RPL_MYINFO - ((MsgTok.NICKNAME, 'set_me_attr:nick'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), MsgTok.ANY, MsgTok.ANY, MsgTok.ANY, @@ -50,54 +50,54 @@ MSG_EXPECTATIONS += [ MsgTok.ANY)), _MsgParseExpectation(MsgTok.SERVER, '250', # RPL_STATSDLINE / RPL_STATSCONN - ((MsgTok.NICKNAME, 'set_me_attr:nick'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), MsgTok.ANY)), _MsgParseExpectation(MsgTok.SERVER, '251', # RPL_LUSERCLIENT - ((MsgTok.NICKNAME, 'set_me_attr:nick'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), MsgTok.ANY)), _MsgParseExpectation(MsgTok.SERVER, '252', # RPL_LUSEROP - ((MsgTok.NICKNAME, 'set_me_attr:nick'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), MsgTok.ANY, MsgTok.ANY)), _MsgParseExpectation(MsgTok.SERVER, '253', # RPL_LUSERUNKNOWN - ((MsgTok.NICKNAME, 'set_me_attr:nick'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), MsgTok.ANY, MsgTok.ANY)), _MsgParseExpectation(MsgTok.SERVER, '254', # RPL_LUSERCHANNELS - ((MsgTok.NICKNAME, 'set_me_attr:nick'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), MsgTok.ANY, MsgTok.ANY)), _MsgParseExpectation(MsgTok.SERVER, '255', # RPL_LUSERME - ((MsgTok.NICKNAME, 'set_me_attr:nick'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), MsgTok.ANY)), _MsgParseExpectation(MsgTok.SERVER, '265', # RPL_LOCALUSERS - ((MsgTok.NICKNAME, 'set_me_attr:nick'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), MsgTok.ANY)), _MsgParseExpectation(MsgTok.SERVER, '265', # RPL_LOCALUSERS - ((MsgTok.NICKNAME, 'set_me_attr:nick'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), MsgTok.ANY, MsgTok.ANY, MsgTok.ANY)), _MsgParseExpectation(MsgTok.SERVER, '266', # RPL_GLOBALUSERS - ((MsgTok.NICKNAME, 'set_me_attr:nick'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), MsgTok.ANY)), _MsgParseExpectation(MsgTok.SERVER, '266', # RPL_GLOBALUSERS - ((MsgTok.NICKNAME, 'set_me_attr:nick'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), MsgTok.ANY, MsgTok.ANY, MsgTok.ANY)), _MsgParseExpectation(MsgTok.SERVER, '375', # RPL_MOTDSTART already implied by 1st 372 - ((MsgTok.NICKNAME, 'set_me_attr:nick'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), MsgTok.ANY)), ] @@ -105,22 +105,22 @@ MSG_EXPECTATIONS += [ MSG_EXPECTATIONS += [ _MsgParseExpectation(MsgTok.SERVER, '005', # RPL_ISUPPORT - ((MsgTok.NICKNAME, 'set_me_attr:nick'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), (MsgTok.ANY, ':isupport'), MsgTok.ANY), # comment idx_into_list=1), _MsgParseExpectation(MsgTok.SERVER, '372', # RPL_MOTD - ((MsgTok.NICKNAME, 'set_me_attr:nick'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), (MsgTok.ANY, ':line'))), _MsgParseExpectation(MsgTok.SERVER, '376', # RPL_ENDOFMOTD - ((MsgTok.NICKNAME, 'set_me_attr:nick'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), MsgTok.ANY)), # comment _MsgParseExpectation(MsgTok.SERVER, '396', # RPL_VISIBLEHOST - ((MsgTok.NICKNAME, 'set_me_attr:nick'), - (MsgTok.SERVER, 'set_me_attr:host'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), + (MsgTok.SERVER, 'setattr_me:host'), MsgTok.ANY)), # comment ] @@ -128,18 +128,18 @@ MSG_EXPECTATIONS += [ MSG_EXPECTATIONS += [ _MsgParseExpectation(MsgTok.SERVER, '900', # RPL_LOGGEDIN - ((MsgTok.NICKNAME, 'set_me_attr:nick'), - (MsgTok.NICK_USER_HOST, 'set_me_attr:nickuserhost'), - (MsgTok.ANY, 'set_db_attr:sasl_account'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), + (MsgTok.NICK_USER_HOST, 'setattr_me:nickuserhost'), + (MsgTok.ANY, 'setattr_db:sasl_account'), MsgTok.ANY)), # comment _MsgParseExpectation(MsgTok.SERVER, '903', # RPL_SASLSUCCESS - ((MsgTok.NICKNAME, 'set_me_attr:nick'), - (MsgTok.ANY, 'set_db_attr:sasl_auth_state'))), + ((MsgTok.NICKNAME, 'setattr_me:nick'), + (MsgTok.ANY, 'setattr_db:sasl_auth_state'))), _MsgParseExpectation(MsgTok.SERVER, '904', # ERR_SASLFAIL - ((MsgTok.NICKNAME, 'set_me_attr:nick'), - (MsgTok.ANY, 'set_db_attr:sasl_auth_state'))), + ((MsgTok.NICKNAME, 'setattr_me:nick'), + (MsgTok.ANY, 'setattr_db:sasl_auth_state'))), _MsgParseExpectation(MsgTok.NONE, 'AUTHENTICATE', ('+',)), @@ -149,12 +149,12 @@ MSG_EXPECTATIONS += [ MSG_EXPECTATIONS += [ _MsgParseExpectation(MsgTok.SERVER, 'CAP', - ((MsgTok.NICKNAME, 'set_me_attr:nick'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), ('NEW', ':subverb'), (MsgTok.LIST, ':items'))), _MsgParseExpectation(MsgTok.SERVER, 'CAP', - ((MsgTok.NICKNAME, 'set_me_attr:nick'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), ('DEL', ':subverb'), (MsgTok.LIST, ':items'))), _MsgParseExpectation(MsgTok.SERVER, @@ -164,7 +164,7 @@ MSG_EXPECTATIONS += [ (MsgTok.LIST, ':items'))), _MsgParseExpectation(MsgTok.SERVER, 'CAP', - ((MsgTok.NICKNAME, 'set_me_attr:nick'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), ('ACK', ':subverb'), (MsgTok.LIST, ':items'))), _MsgParseExpectation(MsgTok.SERVER, @@ -174,7 +174,7 @@ MSG_EXPECTATIONS += [ (MsgTok.LIST, ':items'))), _MsgParseExpectation(MsgTok.SERVER, 'CAP', - ((MsgTok.NICKNAME, 'set_me_attr:nick'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), ('NAK', ':subverb'), (MsgTok.LIST, ':items'))), _MsgParseExpectation(MsgTok.SERVER, @@ -190,12 +190,12 @@ MSG_EXPECTATIONS += [ (MsgTok.LIST, ':items'))), _MsgParseExpectation(MsgTok.SERVER, 'CAP', - ((MsgTok.NICKNAME, 'set_me_attr:nick'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), ('LS', ':subverb'), (MsgTok.LIST, ':items'))), _MsgParseExpectation(MsgTok.SERVER, 'CAP', - ((MsgTok.NICKNAME, 'set_me_attr:nick'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), ('LS', ':subverb'), ('*', ':tbc'), (MsgTok.LIST, ':items'))), @@ -213,12 +213,12 @@ MSG_EXPECTATIONS += [ (MsgTok.LIST, ':items'))), _MsgParseExpectation(MsgTok.SERVER, 'CAP', - ((MsgTok.NICKNAME, 'set_me_attr:nick'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), ('LIST', ':subverb'), (MsgTok.LIST, ':items'))), _MsgParseExpectation(MsgTok.SERVER, 'CAP', - ((MsgTok.NICKNAME, 'set_me_attr:nick'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), ('LIST', ':subverb'), ('*', ':tbc'), (MsgTok.LIST, ':items'))), @@ -233,7 +233,7 @@ MSG_EXPECTATIONS += [ MsgTok.ANY)), # comment _MsgParseExpectation(MsgTok.SERVER, '432', # ERR_ERRONEOUSNICKNAME - ((MsgTok.NICKNAME, 'set_me_attr:nick'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), MsgTok.NICKNAME, # no need to re-use the bad one MsgTok.ANY)), # comment _MsgParseExpectation(MsgTok.SERVER, @@ -255,30 +255,30 @@ MSG_EXPECTATIONS += [ MSG_EXPECTATIONS += [ _MsgParseExpectation(MsgTok.SERVER, '332', # RPL_TOPIC - ((MsgTok.NICKNAME, 'set_me_attr:nick'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), (MsgTok.CHANNEL, ':CHAN'), - (MsgTok.ANY, 'set_topic_attr:what'))), + (MsgTok.ANY, 'setattr_topic:what'))), _MsgParseExpectation(MsgTok.SERVER, '333', # RPL_TOPICWHOTIME - ((MsgTok.NICKNAME, 'set_me_attr:nick'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), (MsgTok.CHANNEL, ':CHAN'), - (MsgTok.NICK_USER_HOST, 'set_topic_attr:who'), + (MsgTok.NICK_USER_HOST, 'setattr_topic:who'), (MsgTok.ANY, ':timestamp'))), _MsgParseExpectation(MsgTok.SERVER, '353', # RPL_NAMREPLY - ((MsgTok.NICKNAME, 'set_me_attr:nick'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), '@', (MsgTok.CHANNEL, ':channel'), (MsgTok.LIST, ':names'))), _MsgParseExpectation(MsgTok.SERVER, '353', # RPL_NAMREPLY - ((MsgTok.NICKNAME, 'set_me_attr:nick'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), '=', (MsgTok.CHANNEL, ':channel'), (MsgTok.LIST, ':names'))), _MsgParseExpectation(MsgTok.SERVER, '366', # RPL_ENDOFNAMES - ((MsgTok.NICKNAME, 'set_me_attr:nick'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), (MsgTok.CHANNEL, ':channel'), MsgTok.ANY)), # comment _MsgParseExpectation((MsgTok.NICK_USER_HOST, ':joiner'), @@ -301,7 +301,7 @@ MSG_EXPECTATIONS += [ MSG_EXPECTATIONS += [ _MsgParseExpectation(MsgTok.SERVER, '401', # ERR_NOSUCKNICK - ((MsgTok.NICKNAME, 'set_me_attr:nick'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), (MsgTok.NICKNAME, ':target'), MsgTok.ANY)), # comment _MsgParseExpectation(MsgTok.SERVER, @@ -310,11 +310,11 @@ MSG_EXPECTATIONS += [ (MsgTok.ANY, ':message'))), _MsgParseExpectation(MsgTok.SERVER, 'NOTICE', - ((MsgTok.NICKNAME, 'set_me_attr:nick'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), (MsgTok.ANY, ':message'))), _MsgParseExpectation((MsgTok.NICK_USER_HOST, 'set_user:sender'), 'NOTICE', - ((MsgTok.NICKNAME, 'set_me_attr:nick'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), (MsgTok.ANY, ':message'))), _MsgParseExpectation((MsgTok.NICK_USER_HOST, 'set_user:sender'), 'NOTICE', @@ -322,7 +322,7 @@ MSG_EXPECTATIONS += [ (MsgTok.ANY, ':message'))), _MsgParseExpectation((MsgTok.NICK_USER_HOST, 'set_user:sender'), 'PRIVMSG', - ((MsgTok.NICKNAME, 'set_me_attr:nick'), + ((MsgTok.NICKNAME, 'setattr_me:nick'), (MsgTok.ANY, ':message'))), _MsgParseExpectation((MsgTok.NICK_USER_HOST, 'set_user:sender'), 'PRIVMSG', @@ -334,15 +334,15 @@ MSG_EXPECTATIONS += [ MSG_EXPECTATIONS += [ _MsgParseExpectation(MsgTok.NONE, 'ERROR', - ((MsgTok.ANY, 'set_db_attr:connection_state'),)), - _MsgParseExpectation((MsgTok.NICK_USER_HOST, 'set_me_attr:nickuserhost'), + ((MsgTok.ANY, 'setattr_db:connection_state'),)), + _MsgParseExpectation((MsgTok.NICK_USER_HOST, 'setattr_me:nickuserhost'), 'MODE', - ((MsgTok.NICKNAME, 'set_me_attr:nick'), - (MsgTok.ANY, 'set_db_attr:user_modes'))), + ((MsgTok.NICKNAME, 'setattr_me:nick'), + (MsgTok.ANY, 'setattr_db:user_modes'))), _MsgParseExpectation(MsgTok.NICKNAME, 'MODE', - ((MsgTok.NICKNAME, 'set_me_attr:nick'), - (MsgTok.ANY, 'set_db_attr:user_modes'))), + ((MsgTok.NICKNAME, 'setattr_me:nick'), + (MsgTok.ANY, 'setattr_db:user_modes'))), _MsgParseExpectation(MsgTok.NONE, 'PING', ((MsgTok.ANY, ':reply'),)), -- 2.30.2