From: Christian Heller Date: Thu, 4 Sep 2025 01:53:24 +0000 (+0200) Subject: Some Completables refactoring. X-Git-Url: https://plomlompom.com/repos/day?a=commitdiff_plain;h=92d9caeeeebf9c858152f5edcd59cad811c3702e;p=ircplom Some Completables refactoring. --- diff --git a/ircplom/client.py b/ircplom/client.py index 67d3ede..86c765f 100644 --- a/ircplom/client.py +++ b/ircplom/client.py @@ -96,7 +96,14 @@ class _Dict(Dict[DictItem]): return toks[0], '' if len(toks) == 1 else toks[1] -class _CompletableStringsList: +class _Completable(ABC): + + @abstractmethod + def complete(self) -> None: + 'Set .completed to "complete" value if possible of current state.' + + +class _CompletableStringsList(_Completable): def __init__(self) -> None: self._incomplete: list[str] = [] @@ -116,7 +123,6 @@ class _CompletableStringsList: self._on_list('remove', value, complete) def complete(self) -> None: - 'Declare list done.' self.completed = tuple(self._incomplete) def clear(self) -> None: @@ -139,7 +145,7 @@ class _UpdatingMixin(AutoAttrMixin): return None if isinstance(self, _CompletableStringsList): return self.completed - if isinstance(self, _Topic): + if isinstance(self, _CompletableTopic): return Topic(*self.completed) for cls in [cls for cls in self.__class__.__mro__ if AutoAttrMixin not in cls.__mro__]: @@ -215,13 +221,18 @@ class _UpdatingDict(_UpdatingMixin, _Dict[DictItem]): self._on_update() -class _UpdatingCompletableStringsList(_UpdatingMixin, _CompletableStringsList): +class _UpdatingCompletable(_UpdatingMixin, _Completable): def complete(self) -> None: - super().complete() + super().complete() # type: ignore self._on_update() +class _UpdatingCompletableStringsList(_UpdatingCompletable, + _CompletableStringsList): + pass + + @dataclass class IrcConnSetup: 'All we need to know to set up a new Client connection.' @@ -312,7 +323,7 @@ class Topic(NamedTuple): who: Optional[NickUserHost] = None -class _Topic: +class _CompletableTopic(_Completable): _what: str = '' _who: Optional[NickUserHost] = None @@ -339,14 +350,13 @@ class _Topic: self._who = NickUserHost(copy.nick, copy.user, copy.host) def complete(self) -> None: - 'Declare data collection finished, return full or empty content.' self.completed = (('', None) if self._who is None else (self._what, self._who)) class _Channel: user_ids: _CompletableStringsList - topic: _Topic + topic: _CompletableTopic def __init__(self, get_id_for_nick: Callable, @@ -428,11 +438,8 @@ class _UpdatingServerCapability(_UpdatingMixin, ServerCapability): pass -class _UpdatingTopic(_UpdatingMixin, _Topic): - - def complete(self) -> None: - super().complete() - self._on_update() +class _UpdatingTopic(_UpdatingCompletable, _CompletableTopic): + pass class _UpdatingChannel(_UpdatingMixin, _Channel):