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)