def wait_async()

in amazon_lex_bot_deploy/amazon_lex_bot_deploy.py [0:0]


def wait_async(f, status_name, status_values, failed_statuses=None, **kwargs):
    """
    wait till function is not in status_values any more
    you can change the params like this: wait_async.retry_with(stop=stop_after_attempt(4))()
    :param f: function to call to receive status
    :param status_name: attribute in response to check
    :param status_values: will wait as long as status is in status_values
    :param failed_statuses: raises Exception when status is in failed_statuses
    :param kwargs: any function parameter
    :return: response or Exception in case of error or status in failed_statuses
    """

    if failed_statuses is None:
        failed_statuses = []
    try:
        wait_response = f(**kwargs)
    except ValueError as ve:
        raise ve
    except Exception as e:
        logger.error(e)
        raise e

    if wait_response[status_name] in status_values:
        logger.info(
            "Waiting. status_name: '{}' still in '{}', waiting to exit status '{}'."
            .format(status_name, wait_response[status_name], status_values))
        raise ValueError(
            "Waiting. status_name: '{}' still in '{}', waiting to exit status '{}'."
            .format(status_name, wait_response[status_name], status_values))

    if wait_response[status_name] in failed_statuses:
        logger.error("failed, no need to wait longer. response: {}\n".format(
            wait_response))
        raise Exception(
            "wait_response[status_name]: {} in failed_statuses: {}".format(
                wait_response[status_name], failed_statuses))

    return wait_response