docs: def get_session(self, notebook_dir=None, no_browser=True, **kwargs):
          '''
          Return handle to IPython session for specified notebook directory.
  
          If an IPython notebook session has already been launched for the
          notebook directory, reuse it.  Otherwise, launch a new IPython notebook
          session.
  
          By default, notebook session is launched using current working
          directory as the notebook directory.
  
          Arguments
          ---------
  
           - `notebook_dir`: Directory to start IPython notebook session in.
           - `no_browser`: Do not launch new browser tab.
          '''
          if notebook_dir in self.sessions and self.sessions[notebook_dir].is_alive():
              # Notebook process is already running for notebook directory,
              session = self.sessions[notebook_dir]
              if 'daemon' in kwargs:
                  # Override `daemon` setting of existing session.
                  session.daemon = kwargs['daemon']
              if not no_browser:
                  session.open()
          else:
              # Notebook process is not running for notebook directory, so
              # start new IPython notebook process.
  
              # Use default `daemon` setting for manager if no specified.
              daemon = kwargs.pop('daemon', self.daemon)
              if no_browser:
                  kwargs['no_browser'] = None
              if notebook_dir is not None:
                  kwargs['notebook_dir'] = notebook_dir
              session = Session(daemon=daemon, **kwargs)
              session.start()
              self.sessions[str(session.notebook_dir)] = session
          return session