#!/bin/env python
"""
Example of using the argument parser to create a simple hello program.
- Author: Casey Walker
- License: MIT
Assuming this file is named `say-hello` and has execution permissions, it can be
used like any normal command line tool:
>>> say-hello Mary Poppins
Hello, Mary Poppins!
"""
import sys
from cliclops.parse import Arg_parser, Floating_spec, Positional_spec
def main() -> int:
help = Floating_spec("h?", "help", desc="Show the help message.")
first_name = Positional_spec(
"first-name", num_args=1, desc="The person's first name."
)
last_name = Positional_spec(
"last-name", is_unbounded=True, desc="The person's last name."
)
ap = Arg_parser(
[help, first_name, last_name],
progname="say-hello",
short_prefixes="-",
long_prefixes="--",
)
usage = f"""{ap.progname} [-h -? --help] <NAME> [<NAME>]"""
(invokename, *parsed_args) = ap.parse()
name: list[str] = []
for parsed_arg in parsed_args:
spec = parsed_arg.spec
if spec == help:
print(usage)
return 0
elif spec in [first_name, last_name]:
name += parsed_arg.values
else:
if isinstance(spec, Floating_spec):
print(
f"Unknown floating argument: {parsed_arg.prefix}"
f"{parsed_arg.floating_form}"
)
else:
print(f"Unknown positional argument: {parsed_arg.values}")
print("Use '-h' to see usage.")
return 1
if len(name) > 0:
print(f"Hello, {' '.join(name)}!")
else:
print("No one to say hello to.")
print("Use '-h' to see usage.")
return 2
return 0
if __name__ == "__main__":
sys.exit(main())