'TUI adaptions to Client.'
# built-ins
from getpass import getuser
-from dataclasses import dataclass, asdict as dc_asdict
+from dataclasses import asdict as dc_asdict
from types import get_original_bases
from typing import Any, Callable, Optional, Self, Sequence
# ourselves
_LOG_PREFIX_IN = '<'
-@dataclass
class _Update:
- path: tuple[str, ...]
- value: Optional[Any] = None
+
+ def __init__(self, path: tuple[str, ...], value: Any) -> None:
+ self.path = path
+ for cls in [cls for cls in _UPDATING_DATACLASSES
+ if isinstance(value, get_original_bases(cls)[1])]:
+ value = cls(**dc_asdict(value))
+ self.value = value
@property
def key(self) -> str:
def update_db(self, update: _Update) -> bool:
'Apply update to .db, and if changing anything, log and trigger.'
- for cls in [cls for cls in _UPDATING_DATACLASSES
- if isinstance(update.value, get_original_bases(cls)[1])]:
- update.value = cls(**dc_asdict(update.value)) # type: ignore
- break
result = self.db.recursive_set_and_report_change(update)
if result is None:
return False