code: def _begin_disconnection_action(self, action):
          
  
          conn_key = action.data['id']
          callback = action.data['callback']
  
          if self._get_connection_state(conn_key) != self.Idle:
              callback(conn_key, self.id, False, 'Cannot start disconnection, connection is not idle')
              return
  
          # Cannot be None since we checked above to make sure it exists
          data = self._get_connection(conn_key)
          data['state'] = self.Disconnecting
          data['microstate'] = None
          data['callback'] = callback
          data['timeout'] = action.timeout
docs: Begin a disconnection attempt
  
          Args:
              action (ConnectionAction): the action object describing what we are
                  connecting to and what the result of the operation was