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__)
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()
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:
)
#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
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
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: