Implement a “Verbose” Flag

Many programs with a command-line interface provide a flag to enable verbose output like logging messages. The more the flag is specified, the more is the level of verbosity. For example using -v would only output warnings whereas -vvv outputs warnings, info and debug messages.

import logging

from powercli import Command
from powercli.methods import Count
from powercli.utils import static


cmd = Command()
cmd.flag(
    identifier="verbose",
    short="v",
    long="verbose",
    description="Enables verbosity up to 5 different levels",
    method=Count(lambda _, amount: amount in range(1, 6), default=static(2)),
)

if __name__ == "__main__":
    args = cmd.parse_args()
    level = {
        # show critical logs on `-v`
        1: logging.CRITICAL,

        # show critical logs and error logs on `-vv`
        2: logging.ERROR,

        # show critical logs, error logs and warning logs on `-vvv`
        3: logging.WARNING,

        # show critical logs, error logs, warning logs and info logs on `-vvvv`
        4: logging.INFO,

        # show critical logs, error logs, warning logs, info logs and debug logs on `-vvvvv`
        5: logging.DEBUG,
    }[args.value_of("verbose")]
    logging.basicConfig(level=level)
    # ... do something with args ...