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] = []
self._on_list('remove', value, complete)
def complete(self) -> None:
- 'Declare list done.'
self.completed = tuple(self._incomplete)
def clear(self) -> None:
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__]:
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.'
who: Optional[NickUserHost] = None
-class _Topic:
+class _CompletableTopic(_Completable):
_what: str = ''
_who: Optional[NickUserHost] = None
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,
pass
-class _UpdatingTopic(_UpdatingMixin, _Topic):
-
- def complete(self) -> None:
- super().complete()
- self._on_update()
+class _UpdatingTopic(_UpdatingCompletable, _CompletableTopic):
+ pass
class _UpdatingChannel(_UpdatingMixin, _Channel):