def _initialize_reader_connection()

in aws_advanced_python_wrapper/read_write_splitting_plugin.py [0:0]


    def _initialize_reader_connection(self, hosts: Tuple[HostInfo, ...]):
        if len(hosts) == 1:
            writer_host = self._get_writer(hosts)
            if writer_host is not None:
                if not self._is_connection_usable(self._writer_connection, self._plugin_service.driver_dialect):
                    self._get_new_writer_connection(writer_host)
                logger.warning("ReadWriteSplittingPlugin.NoReadersFound", writer_host.url)
                return

        conn: Optional[Connection] = None
        reader_host: Optional[HostInfo] = None

        conn_attempts = len(self._plugin_service.hosts) * 2
        for _ in range(conn_attempts):
            host = self._plugin_service.get_host_info_by_strategy(HostRole.READER, self._reader_selector_strategy)
            if host is not None:
                try:
                    conn = self._plugin_service.connect(host, self._properties)
                    provider = self._conn_provider_manager.get_connection_provider(host, self._properties)
                    self._is_reader_conn_from_internal_pool = (ReadWriteSplittingPlugin._POOL_PROVIDER_CLASS_NAME in str(type(provider)))
                    reader_host = host
                    break
                except Exception:
                    logger.warning("ReadWriteSplittingPlugin.FailedToConnectToReader", host.url)

        if conn is None or reader_host is None:
            self._log_and_raise_exception("ReadWriteSplittingPlugin.NoReadersAvailable")
            return

        logger.debug("ReadWriteSplittingPlugin.SuccessfullyConnectedToReader", reader_host.url)

        self._set_reader_connection(conn, reader_host)
        self._switch_current_connection_to(conn, reader_host)

        logger.debug("ReadWriteSplittingPlugin.SwitchedFromWriterToReader", reader_host.url)