def reports_progress(reporter):
    """A decorator factory to mark functions which report progress.

    Args:
        reporter: A zero-argument callable to report progress.
            The callable provided should have the means to both
            retrieve and display current progress information.
    """

    def decorator(func):  # pylint: disable=missing-docstring
        @wraps(func)
        def wrapper(*args, **kwargs):  # pylint: disable=missing-docstring
            with progress_reporter(reporter):
                return func(*args, **kwargs)

        return wrapper

    return decorator
A decorator factory to mark functions which report progress.

    Args:
        reporter: A zero-argument callable to report progress.
            The callable provided should have the means to both
            retrieve and display current progress information.