]> kaliko git repositories - python-musicpdaio.git/commitdiff
Move protocol logic in the client
authorkaliko <kaliko@azylum.org>
Sun, 10 Mar 2024 16:32:45 +0000 (17:32 +0100)
committerkaliko <kaliko@azylum.org>
Sun, 10 Mar 2024 16:38:56 +0000 (17:38 +0100)
mpdaio/client.py
mpdaio/connection.py

index 00dbfed61f50e237bac788000200236b4752af3e..aaffc0a929e3f4b9cc7de56ce3d95c4d9c1fd480 100644 (file)
@@ -11,7 +11,7 @@ from .exceptions import MPDConnectionError, MPDProtocolError, MPDCommandError
 from .utils import Range, escape
 
 from .const import CONNECTION_MAX, CONNECTION_TIMEOUT
-from .const import ERROR_PREFIX, SUCCESS, NEXT
+from .const import HELLO_PREFIX, ERROR_PREFIX, SUCCESS, NEXT
 
 log = logging.getLogger(__name__)
 
@@ -295,17 +295,28 @@ class CmdHandler:
             return retval
 
     async def _init_connection(self):
-        """Init connection if needed"""
+        """Init connection if needed
+
+        * Consumes the hello line and sets the protocol version
+        * Send password command if a password is provided
+        """
         if not self.connection.version:
-            # TODO: move hello here instead of connection?
-            # Need to consume hello
-            pass
+            await self._hello()
         if self.password and not self.connection.auth:
             # Need to send password
             await self._write_command('password', [self.password])
             await self._fetch_nothing()
             self.connection.auth = True
 
+    async def _hello(self) -> None:
+        """Consume HELLO_PREFIX"""
+        data = await self.connection.readuntil(b'\n')
+        rcv = data.decode('utf-8')
+        if not rcv.startswith(HELLO_PREFIX):
+            raise MPDProtocolError(f'Got invalid MPD hello: "{rcv}"')
+        log.debug('consumed hello prefix: %r', rcv)
+        self.connection.version = rcv.split('\n')[0][len(HELLO_PREFIX):]
+
     async def _write_line(self, line):
         self.connection.write(f"{line!s}\n".encode())
         await self.connection.drain()
index d00f85af9755f81b84299dfe999ac624bb8f0e4c..f200bad7d85d1e923d245ff7eea2853ea6b4b160 100644 (file)
@@ -12,9 +12,6 @@ from collections import OrderedDict
 from types import TracebackType
 from typing import Any, List, Optional, Tuple, Type
 
-from .const import HELLO_PREFIX
-from .exceptions import MPDProtocolError
-
 try:  # Python 3.7
     base = contextlib.AbstractAsyncContextManager
 except AttributeError as err:
@@ -75,7 +72,6 @@ class ConnectionPool(base):
                         )
             #log.debug('Connected to %s:%s', host[0], host[1])
             connection = Connection(self, host, reader, writer)
-            await connection._hello()
             connections.append(connection)
 
         connection.in_use = True
@@ -140,7 +136,8 @@ class Connection(base):
         self._reader = reader
         self._writer = writer
         self._closed = False
-        self.auth = False
+        #: password command with the secret was sent
+        self.auth: bool = False
         self.in_use = False
         self.version: str | None = None
 
@@ -169,16 +166,6 @@ class Connection(base):
         except AttributeError:  # wait_closed is new in 3.7
             pass
 
-    async def _hello(self) -> None:
-        """Consume HELLO_PREFIX"""
-        self.in_use = True
-        data = await self.readuntil(b'\n')
-        rcv = data.decode('utf-8')
-        if not rcv.startswith(HELLO_PREFIX):
-            raise MPDProtocolError(f'Got invalid MPD hello: "{rcv}"')
-        log.debug('consumed hello prefix: %r', rcv)
-        self.version = rcv.split('\n')[0][len(HELLO_PREFIX):]
-
     def __getattr__(self, name: str) -> Any:
         """All unknown attributes are delegated to the reader and writer"""
         if self._closed or not self.in_use: