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: If there was an error that caused a disconnect, this property holds
  the error detail. Empty string otherwise.
docstr_tok: ["If","there","was","an","error","that","caused","a","disconnect",",","this","property","holds","the","error","detail",".","Empty","string","otherwise","."]
code: def error_detail(self) -> str:
      """If there was an error that caused a disconnect, this property holds
      the error detail. Empty string otherwise.
  
      """
      if not isinstance(self._state, DISCONNECTED):
          return ""
      return self._state.error_detail
  
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 7 for calling the ClientConnection obj's underlying member method code with example usage: obj.error_detail() and returns: self, str