home · contact · privacy
Reorganize task name parsing towards greater flexibility.
authorChristian Heller <c.heller@plomlompom.de>
Wed, 3 Sep 2025 12:40:50 +0000 (14:40 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Wed, 3 Sep 2025 12:40:50 +0000 (14:40 +0200)
ircplom/client.py
ircplom/msg_parse_expectations.py

index f9192628d9f3ce515365b2e03be58d2cb98de92f..6bd924dd01b19ab455f53ff209eb27a279b28bf0 100644 (file)
@@ -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] == '-':
index ecdc637d0074d8e0df069e0d0ea432221bd9830d..86c7715a430648016208eb37501228b393273016 100644 (file)
@@ -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'),)),