Continues to execute the function until successful or time runs out.

        :param func: function to execute
        :param message: message to print if time ran out
        :param args: arguments
        :param kwargs: key word arguments
        :return: result of function or None

def until(self, func, message='', *args, **kwargs):
        """
        Continues to execute the function until successful or time runs out.

        :param func: function to execute
        :param message: message to print if time ran out
        :param args: arguments
        :param kwargs: key word arguments
        :return: result of function or None
        """
        value = None
        end_time = time.time() + self._timeout
        while True:
            value = func(*args, **kwargs)
            if self._debug:
                print("Value from func within ActionWait: {}".format(value))
            if value:
                break

            time.sleep(self._poll)
            self._poll *= 1.25
            if time.time() > end_time:
                raise RuntimeError(message)
        return value