From: Christian Heller Date: Sun, 9 Nov 2025 17:35:07 +0000 (+0100) Subject: In CAP negotiation, only REQ caps just shown available via CAP LS. X-Git-Url: https://plomlompom.com/repos/task?a=commitdiff_plain;h=f148cc0abb3bb32d35df8aa089a3374fa2523b66;p=ircplom In CAP negotiation, only REQ caps just shown available via CAP LS. --- diff --git a/src/ircplom/client.py b/src/ircplom/client.py index 168c094..66e9873 100644 --- a/src/ircplom/client.py +++ b/src/ircplom/client.py @@ -575,7 +575,11 @@ class _CapsManager(Clearable): if complete: target.complete() if target is self._ls: - for cap_name in _NAMES_DESIRED_SERVER_CAPS: + for key, data in [_tuple_key_val_from_eq_str(entry) + for entry in sorted(target)]: + self._dict[key].data = data + for cap_name in [cap for cap in _NAMES_DESIRED_SERVER_CAPS + if cap in self._dict.keys()]: self._send('REQ', cap_name) self._send('LIST') else: @@ -583,9 +587,7 @@ class _CapsManager(Clearable): naks = self._list_expectations['NAK'] assert acks == self._list.intersection(acks) assert set() == self._list.intersection(naks) - for key, data in [_tuple_key_val_from_eq_str(entry) - for entry in sorted(self._ls)]: - self._dict[key].data = data + for key in sorted(self._list): self._dict[key].enabled = key in self._list return True return False diff --git a/src/ircplom/db_primitives.py b/src/ircplom/db_primitives.py index 1895263..87cc428 100644 --- a/src/ircplom/db_primitives.py +++ b/src/ircplom/db_primitives.py @@ -60,7 +60,7 @@ class Dict(Clearable, Generic[DictItem]): return orig_cls.__args__[0] def __setitem__(self, key: str, val: DictItem) -> None: - assert isinstance(val, self._item_cls) + assert isinstance(val, self._item_cls), (type(val), self._item_cls) self._dict[key] = val def __delitem__(self, key: str) -> None: diff --git a/src/tests/test.test b/src/tests/test.test index 39ded25..78b1ca7 100644 --- a/src/tests/test.test +++ b/src/tests/test.test @@ -36,17 +36,17 @@ log 1 $ nickname already in use, trying increment log 1 > NICK :foo1 # collect server capabilities insert servermsglogged : +0 MSG :*.?.net CAP * LS : foo bar sasl=PLAIN,EXTERNAL baz cap-notify -log 1 > CAP REQ :sasl -log 1 > CAP :LIST -insert servermsglogged : +0 MSG :*.?.net CAP * ACK :sasl -insert servermsglogged : +0 MSG :*.?.net CAP * LIST :cap-notify sasl log 1 $ caps:bar:data set to: [] log 1 $ caps:baz:data set to: [] log 1 $ caps:cap-notify:data set to: [] -log 1 $ caps:cap-notify:enabled set to: [True] log 1 $ caps:foo:data set to: [] log 1 $ caps:sasl:data set to: [] log 1 $ caps:sasl:data set to: [PLAIN,EXTERNAL] +log 1 > CAP REQ :sasl +log 1 > CAP :LIST +insert servermsglogged : +0 MSG :*.?.net CAP * ACK :sasl +insert servermsglogged : +0 MSG :*.?.net CAP * LIST :cap-notify sasl +log 1 $ caps:cap-notify:enabled set to: [True] log 1 $ caps:sasl:enabled set to: [True] # authenticate via SASL, collect items of user identity log 1 $ sasl_auth_state set to: [attempting]