@dataclass
-class _IrcConnection(BaseIrcConnection, _ClientIdMixin):
+class IrcConnection(BaseIrcConnection, _ClientIdMixin):
+ 'Parent extended to work with Client.'
hostname: InitVar[str] # needed by BaseIrcConnection, but not desired as
port: InitVar[int] # dataclass fields, only for __post_init__ call
return False
-_ClientConnClass = TypeVar('_ClientConnClass', bound=_IrcConnection)
-
-
-class Client(ABC, ClientQueueMixin, Generic[_ClientConnClass]):
+class Client(ABC, ClientQueueMixin):
'Abstracts socket connection, loop over it, and handling messages from it.'
+ conn: Optional[IrcConnection] = None
_caps: _CapsManager
- conn: Optional[_IrcConnection] = None
- _cls_conn: _ClientConnClass
+ _cls_conn: type[IrcConnection] = IrcConnection
def __init__(self, conn_setup: IrcConnSetup, **kwargs) -> None:
self.client_id = conn_setup.hostname
class ClientKnowingTui(Client):
+ 'Adapted to communicate with ClientTui.'
def _client_tui_trigger(self, todo: str, **kwargs) -> None:
self._put(TuiEvent.affector('for_client_do').kw(
from queue import SimpleQueue, Empty as QueueEmpty
from typing import Generator, Iterator, Optional
from ircplom.events import Event, Loop, QueueMixin
-from ircplom.client import _IrcConnection, IrcConnSetup
+from ircplom.client import IrcConnection, IrcConnSetup
from ircplom.client_tui import ClientKnowingTui, ClientTui
from ircplom.irc_conn import IrcMessage
from ircplom.tui_base import TerminalInterface, TuiEvent
).kw(typed_in=to_yield)
-class _FakeIrcConnection(_IrcConnection):
+class _FakeIrcConnection(IrcConnection):
def __init__(self, **kwargs) -> None:
self._q_server_msgs: SimpleQueue = SimpleQueue()