class_docstr: Class for communicating between a Frontend and a Kernel
  
  Must be subclassed with a publish_msg method implementation which
  sends comm messages through the iopub channel.
class_docstr_tok: ["Class","for","communicating","between","a","Frontend","and","a","Kernel","Must","be","subclassed","with","a","publish_msg","method","implementation","which","sends","comm","messages","through","the","iopub","channel","."]
docstr: Open the frontend-side version of this comm
docstr_tok: ["Open","the","frontend-side","version","of","this","comm"]
code: def open(
      self,
      data: MaybeDict = None,
      metadata: MaybeDict = None,
      buffers: BuffersType = None,
  ) -> None:
      """Open the frontend-side version of this comm"""
  
      if data is None:
          data = self._open_data
      comm_manager = comm.get_comm_manager()
      if comm_manager is None:
          msg = (
              "Comms cannot be opened without a comm_manager."
          )  # type:ignore[unreachable]
          raise RuntimeError(msg)
  
      comm_manager.register_comm(self)
      try:
          self.publish_msg(
              "comm_open",
              data=data,
              metadata=metadata,
              buffers=buffers,
              target_name=self.target_name,
              target_module=self.target_module,
          )
          self._closed = False
      except Exception:
          comm_manager.unregister_comm(self)
          raise
  
imports: from __future__ import annotations
  import contextlib
  import logging
  import typing
  import uuid
  from traitlets.utils.importstring import import_item
  import comm
label_desc: Use image node_id 4 for calling the BaseComm obj's underlying member method code with example usage: obj.open(data, metadata, buffers) without return types