class_docstr: A low-level class used to connect to a Bokeh server.
  
      
class_docstr_tok: ["A","low-level","class","used","to","connect","to","a","Bokeh","server","."]
docstr: Ask for information about the server.
  
  Returns:
      A dictionary of server attributes.
docstr_tok: ["Ask","for","information","about","the","server",".","Returns",":","A","dictionary","of","server","attributes","."]
code: def request_server_info(self) -> ServerInfo:
      """Ask for information about the server.
  
      Returns:
          A dictionary of server attributes.
  
      """
      if self._server_info is None:
          self._server_info = self._send_request_server_info()
      return self._server_info
  
imports: from __future__ import annotations
  import logging
  from typing import TYPE_CHECKING, Any, Callable
  from tornado.httpclient import HTTPClientError, HTTPRequest
  from tornado.ioloop import IOLoop
  from tornado.websocket import WebSocketError, websocket_connect
  from ..core.types import ID
  from ..protocol import Protocol
  from ..protocol.exceptions import MessageError, ProtocolError, ValidationError
  from ..protocol.receiver import Receiver
  from ..util.strings import format_url_query_arguments
  from ..util.tornado import fixup_windows_event_loop_policy
  from .states import CONNECTED_AFTER_ACK, CONNECTED_BEFORE_ACK, DISCONNECTED, NOT_YET_CONNECTED, WAITING_FOR_REPLY, ErrorReason, State
  from .websocket import WebSocketClientConnectionWrapper
label_desc: Use image node_id 14 for calling the ClientConnection obj's underlying member method code with example usage: obj.request_server_info() and returns: self