return super().__getattribute__(key)
+class _Clearable(ABC):
+
+ @abstractmethod
+ def clear(self) -> None:
+ 'Zero internal knowledge.'
+
+
DictItem = TypeVar('DictItem')
-class Dict(Generic[DictItem]):
+class Dict(_Clearable, Generic[DictItem]):
'Customized dict replacement.'
def __init__(self, **kwargs) -> None:
return self._dict[key]
def clear(self) -> None:
- 'Zero content.'
self._dict.clear()
@property
'Set .completed to "complete" value if possible of current state.'
-class _CompletableStringsList(_Completable):
+class _CompletableStringsList(_Clearable, _Completable):
def __init__(self) -> None:
self._incomplete: list[str] = []
self.completed = tuple(self._incomplete)
def clear(self) -> None:
- 'Wipe content and declare new emptiness as complete.'
self._incomplete.clear()
self.complete()
channel.remove_user(user)
-class _ClientDb(_UpdatingMixin, SharedClientDbFields):
+class _ClientDb(_Clearable, _UpdatingMixin, SharedClientDbFields):
_keep_on_clear = set(IrcConnSetup.__annotations__.keys())
caps: _UpdatingDict[_UpdatingServerCapability]
channels: _UpdatingChannelsDict
return attr
def clear(self) -> None:
- 'Wipe updating attributes.'
for key, value in [(k, v) for k, v in self._deep_annotations().items()
if k not in self._keep_on_clear]:
- if hasattr(value, 'clear'):
+ if issubclass(value, _Clearable):
getattr(self, key).clear()
elif issubclass(value, str):
setattr(self, key, '')
return toks[1]
-class _CapsManager:
+class _CapsManager(_Clearable):
def __init__(self,
sender: Callable,
self.clear()
def clear(self) -> None:
- 'Zero internal knowledge.'
self._dict.clear()
self._ls = _CompletableStringsList()
self._list = _CompletableStringsList()