in mysqlx-connector-python/lib/mysqlx/connection.py [0:0]
def connect(self) -> None:
"""Attempt to connect to the MySQL server.
Raises:
:class:`mysqlx.InterfaceError`: If fails to connect to the MySQL
server.
:class:`mysqlx.TimeoutError`: If connect timeout was exceeded.
"""
# Loop and check
error = None
while self.router_manager.can_failover():
try:
router = self.router_manager.get_next_router()
self.stream.connect(
router.get_connection_params(), self._connect_timeout # type: ignore[arg-type]
)
reader = MessageReader(self.stream)
writer = MessageWriter(self.stream)
self.protocol = Protocol(reader, writer)
caps_data = self.protocol.get_capabilites().capabilities
caps = (
{get_item_or_attr(cap, "name").lower(): cap for cap in caps_data}
if caps_data
else {}
)
# Set TLS capabilities
self._set_tls_capabilities(caps)
# Set connection attributes capabilities
if "attributes" in self.settings:
conn_attrs = self.settings["attributes"]
self.protocol.set_capabilities(session_connect_attrs=conn_attrs)
# Set compression capabilities
compression = self.settings.get("compression", Compression.PREFERRED)
algorithms = self.settings.get("compression-algorithms")
algorithm = (
None
if compression == Compression.DISABLED
else self._set_compression_capabilities(
caps, compression, algorithms
)
)
self._authenticate()
self.protocol.set_compression(algorithm)
return
except (OSError, RuntimeError) as err:
error = err
router.set_unavailable()
# Python 2.7 does not raise a socket.timeout exception when using
# settimeout(), but it raises a socket.error with errno.EAGAIN (11)
# or errno.EINPROGRESS (115) if connect-timeout value is too low
if error is not None and isinstance(error, socket.timeout):
if len(self._routers) <= 1:
raise TimeoutError(
"Connection attempt to the server was aborted. "
f"Timeout of {self._connect_timeout} ms was exceeded"
)
raise TimeoutError(
"All server connection attempts were aborted. "
f"Timeout of {self._connect_timeout} ms was exceeded for each "
"selected server"
)
if len(self._routers) <= 1:
raise InterfaceError(f"Cannot connect to host: {error}")
raise InterfaceError("Unable to connect to any of the target hosts", 4001)