# ourselves
from ircplom.db_primitives import (
Dict,
- _Clearable, _Completable, _CompletableStringsSet, _Dict,
- _UpdatingAttrsMixin, _UpdatingCompletable,
- _UpdatingCompletableStringsOrdered, _UpdatingCompletableStringsSet,
- _UpdatingDict, _UpdatingMixin,)
+ _Clearable, _Completable, _CompletableStringsSet, _UpdatingAttrsMixin,
+ _UpdatingCompletable, _UpdatingCompletableStringsOrdered,
+ _UpdatingCompletableStringsSet,_UpdatingDict, _UpdatingMixin)
from ircplom.events import (
AffectiveEvent, CrashingException, ExceptionEvent, QueueMixin)
from ircplom.irc_conn import (
)
+def _tuple_key_val_from_eq_str(eq_str: str) -> tuple[str, str]:
+ toks = eq_str.split('=', maxsplit=1)
+ return toks[0], ('' if len(toks) == 1 else toks[1])
+
+
class SendFail(Exception):
'When Client.send fails.'
class _Channel(Channel):
user_ids: _CompletableStringsSet
topic: _CompletableTopic
- exits: _Dict[str]
def __init__(self,
userid_for_nickuserhost: Callable,
'Parse CAP message to negot. steps, DB inputs; return if successful.'
for item in items:
if verb == 'NEW':
- key, data = _Dict.key_val_from_eq_str(item)
+ key, data = _tuple_key_val_from_eq_str(item)
self._dict[key].data = data
elif verb == 'DEL':
del self._dict[item]
naks = self._list_expectations['NAK']
assert acks == self._list.intersection(acks)
assert set() == self._list.intersection(naks)
- for key, data in [_Dict.key_val_from_eq_str(entry)
+ for key, data in [_tuple_key_val_from_eq_str(entry)
for entry in sorted(self._ls)]:
self._dict[key].data = data
self._dict[key].enabled = key in self._list
if item[0] == '-':
del self.db.isupport[item[1:]]
else:
- key, data = _Dict.key_val_from_eq_str(item)
+ key, data = _tuple_key_val_from_eq_str(item)
self.db.isupport[key] = data
elif ret['_verb'] == '401': # ERR_NOSUCHNICK
raise TargetUserOffline(ret['missing'])
IrcConnSetup, NewClientEvent, NickUserHost, SendFail,
ServerCapability, SharedClientDbFields, TargetUserOffline, User)
from ircplom.db_primitives import AutoAttrMixin, Dict, DictItem
+from ircplom.irc_conn import IrcMessage
from ircplom.tui_base import (
BaseTui, FormattingString, PromptWidget, TuiEvent, Window,
CMD_SHORTCUTS, LOG_FMT_ATTRS, LOG_FMT_TAG_ALERT)
-from ircplom.irc_conn import IrcMessage
CMD_SHORTCUTS['disconnect'] = 'window.disconnect'
CMD_SHORTCUTS['join'] = 'window.join'
class _UpdatingDict(Dict[DictItem], _UpdatingNode):
- def items(self) -> tuple[tuple[str, DictItem], ...]:
- 'Key-value pairs of item registrations.'
- return tuple((k, v) for k, v in self._dict.items())
-
def _get(self, key: str):
if key not in self._dict:
self._dict[key] = self._item_cls()
return self._dict[key]
def _set(self, key: str, value) -> None:
- self._dict[key] = value
+ self[key] = value
def _unset(self, key: str) -> None:
- del self._dict[key]
+ del self[key]
def _is_set(self, key: str) -> bool:
return key in self._dict
self._dict: dict[str, DictItem] = {}
super().__init__(**kwargs)
- def keys(self) -> tuple[str, ...]:
- 'Keys of item registrations.'
- return tuple(self._dict.keys())
+ def __getattribute__(self, key: str):
+ if key in {'items', 'keys', 'values'}:
+ return getattr(self._dict, key)
+ return super().__getattribute__(key)
def __getitem__(self, key: str) -> DictItem:
return self._dict[key]
else self.__orig_bases__[0])
return orig_cls.__args__[0]
-
-class _Dict(Dict[DictItem]):
-
def __setitem__(self, key: str, val: DictItem) -> None:
assert isinstance(val, self._item_cls)
self._dict[key] = val
def __delitem__(self, key: str) -> None:
del self._dict[key]
- def values(self) -> tuple[DictItem, ...]:
- 'Items registered.'
- return tuple(self._dict.values())
-
- @staticmethod
- def key_val_from_eq_str(eq_str: str) -> tuple[str, str]:
- 'Split eq_str by "=", and if none, into eq_str and "".'
- toks = eq_str.split('=', maxsplit=1)
- return toks[0], '' if len(toks) == 1 else toks[1]
-
class _Completable(ABC):
completed: Any
return tuple(self._deep_annotations().keys())
-class _UpdatingDict(_UpdatingMixin, _Dict[DictItem]):
+class _UpdatingDict(_UpdatingMixin, Dict[DictItem]):
_create_if_none: Optional[dict[str, Any]] = None
def __bool__(self) -> bool: