def _switch_connection_if_required()

in aws_advanced_python_wrapper/read_write_splitting_plugin.py [0:0]


    def _switch_connection_if_required(self, read_only: bool):
        current_conn = self._plugin_service.current_connection
        driver_dialect = self._plugin_service.driver_dialect

        if (current_conn is not None and
                driver_dialect is not None and driver_dialect.is_closed(current_conn)):
            self._log_and_raise_exception("ReadWriteSplittingPlugin.SetReadOnlyOnClosedConnection")

        if current_conn is not None and driver_dialect.can_execute_query(current_conn):
            try:
                self._plugin_service.refresh_host_list()
            except Exception:
                pass  # Swallow exception

        hosts = self._plugin_service.hosts
        if hosts is None or len(hosts) == 0:
            self._log_and_raise_exception("ReadWriteSplittingPlugin.EmptyHostList")

        current_host = self._plugin_service.current_host_info
        if current_host is None:
            self._log_and_raise_exception("ReadWriteSplittingPlugin.UnavailableHostInfo")
            return

        if read_only:
            if not self._plugin_service.is_in_transaction and current_host.role != HostRole.READER:
                try:
                    self._switch_to_reader_connection(hosts)
                except Exception:
                    if not self._is_connection_usable(current_conn, driver_dialect):
                        self._log_and_raise_exception("ReadWriteSplittingPlugin.ErrorSwitchingToReader")
                        return

                    logger.warning("ReadWriteSplittingPlugin.FallbackToWriter", current_host.url)
        elif current_host.role != HostRole.WRITER:
            if self._plugin_service.is_in_transaction:
                self._log_and_raise_exception("ReadWriteSplittingPlugin.SetReadOnlyFalseInTransaction")

            try:
                self._switch_to_writer_connection(hosts)
            except Exception:
                self._log_and_raise_exception("ReadWriteSplittingPlugin.ErrorSwitchingToWriter")