#!/usr/bin/env python3 """A small CLI that prints a greeting.""" import argparse from collections.abc import Sequence def build_parser() -> argparse.ArgumentParser: """Create and configure the argument parser.""" parser = argparse.ArgumentParser(description="Print a personalized greeting.") parser.add_argument("name", help="name of the person to greet") parser.add_argument( "-n", "--count", type=int, default=1, help="number of greetings to print (default: 1)", ) parser.add_argument( "--uppercase", action="store_true", help="print the greeting in uppercase", ) return parser def parse_args(argv: Sequence[str] | None = None) -> argparse.Namespace: """Parse CLI arguments and validate their values.""" args = build_parser().parse_args(argv) if args.count < 1: build_parser().error("--count must be at least 1") return args def make_greeting(name: str, uppercase: bool = False) -> str: """Build a greeting message.""" greeting = f"Hello, {name}!" return greeting.upper() if uppercase else greeting def main(argv: Sequence[str] | None = None) -> int: """Run the command-line application.""" args = parse_args(argv) greeting = make_greeting(args.name, args.uppercase) for _ in range(args.count): print(greeting) return 0 def _test_make_greeting() -> None: assert make_greeting("Ada") == "Hello, Ada!" assert make_greeting("Ada", uppercase=True) == "HELLO, ADA!" if __name__ == "__main__": raise SystemExit(main())