def _begin_connection_action(self, action):
        """Begin a connection attempt

        Args:
            action (ConnectionAction): the action object describing what we are
                connecting to
        """

        conn_id = action.data['connection_id']
        int_id = action.data['internal_id']
        callback = action.data['callback']

        # Make sure we are not reusing an id that is currently connected to something
        if self._get_connection_state(conn_id) != self.Disconnected:
            print(self._connections[conn_id])
            callback(conn_id, self.id, False, 'Connection ID is already in use for another connection')
            return

        if self._get_connection_state(int_id) != self.Disconnected:
            callback(conn_id, self.id, False, 'Internal ID is already in use for another connection')
            return

        conn_data = {
            'state': self.Connecting,
            'microstate': None,
            'conn_id': conn_id,
            'int_id': int_id,
            'callback': callback,
            'timeout': action.timeout,
            'context': action.data['context']
        }

        self._connections[conn_id] = conn_data
        self._int_connections[int_id] = conn_data
Begin a connection attempt

        Args:
            action (ConnectionAction): the action object describing what we are
                connecting to