def METHOD_NAME(function):
    @functools.wraps(function)
    def run_function(*args, **kwargs):
        """This assumes the function has not already been called.
        If backoff_iterator is empty, we should still run the function a single time with no delay.
        """
        call_retryable_function = functools.partial(function, *args, **kwargs)
        for delay in next(backoff_iterator_generator):
            try:
                return call_retryable_function()
            except Exception as e:
                if not should_retry_error(e):
                    raise
            time.sleep(delay)
        # Only or final attempt
        return call_retryable_function()
    return run_function