home · contact · privacy
Re-organize NickUserHost field updating code.
authorChristian Heller <c.heller@plomlompom.de>
Fri, 5 Sep 2025 14:43:25 +0000 (16:43 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Fri, 5 Sep 2025 14:43:25 +0000 (16:43 +0200)
ircplom/client.py

index 35f354dfe171e3c27048090f91cf3823e6f90ba9..69581e436d6bf98b496a2c38581f588f6a64d93d 100644 (file)
@@ -525,20 +525,26 @@ class _ClientDb(_UpdatingMixin, SharedClientDbFields):
         if len(matches) == 1:
             id_ = matches[0]
             if '?' in {nickuserhost.user, nickuserhost.host}:
-                assert nickuserhost.user == nickuserhost.host
+                assert nickuserhost.user == nickuserhost.host  # both are '?'
+                # only provided with .nick, no fields we could update
                 return id_
             stored = self.users[id_]
-            if '?' in {stored.user, stored.host}:
-                assert stored.host in {stored.user, '?'}
+            # .nick by definition same, check other fields for updatability;
+            # allow where '?', or for set .user only to add "~" prefix, assert
+            # nothing else could have changed
+            if stored.host == '?':
                 assert updating
-                self.users.set_updating(id_, nickuserhost)
-            else:
-                assert nickuserhost.host == stored.host
-                if nickuserhost.user == f'~{stored.user}':
-                    assert updating
-                    self.users.set_updating(id_, nickuserhost)
+                stored.host = nickuserhost.host
+                if stored.user == '?':
+                    stored.user = nickuserhost.user
                 else:
                     assert nickuserhost.user == stored.user
+            elif nickuserhost.user == f'~{stored.user}':
+                assert updating
+                assert stored.host == nickuserhost.host
+                stored.user = nickuserhost.user
+            else:  # not seen set .host with unset .user yet
+                assert stored.user != '?'
         elif create_if_none:
             id_ = str(uuid4())
             self.users.set_updating(id_, nickuserhost)