Python Cli¶
command line interface
Click¶
import click
@click.command()
@click.option('-m', '--module', type=click.Choice(['log', 'content', 'dimension']), required=True)
def dots(n):
click.echo('.' * n)
if __name__ == '__main__':
dots()
argparse¶
def main():
parser = argparse.ArgumentParser(description="Generate your vaccination QR code.")
parser.add_argument("-n", "--name", type=str, help="Your name", required=True)
parser.add_argument("-b", "--birth", type=str, help="Your birthday in YYYY-MM-DD format", required=True)
parser.add_argument("-m", "--manufacturer", type=str, nargs="+", help="The vaccine manufacturer", required=True, choices=[
"pfizer","moderna","astrazeneca","janssen","sinovac"])
parser.add_argument("-d", "--date", type=str, nargs="+", help="The date of vaccination", required=True)
args = parser.parse_args()
if len(args.manufacturer) != len(args.date):
logging.error(
"The number of vaccine manufacturer doesn't match with the number of vaccine dates."
)
exit(1)
qr_code = QRCode(name=args.name, birth=args.birth, vaccine=[Vaccination(args.manufacturer[i], args.date[i]) for i in range(len(args.date))])
generate_qr_code(qr_code)
if __name__ == "__main__":
try:
main()
except ValidationException as e:
logging.error(e)
except Exception as e:
logging.exception(e)
Typer¶
import typer
from enum import Enum
from typing import List, Optional
class ApprovedVaccine(str, Enum):
pfizer = "pfizer"
moderna = "moderna"
astrazeneca = "astrazeneca"
janssen = "janssen"
sinovac = "sinovac"
def main(
name: str = typer.Option(..., help="Your Name"),
birth: str = typer.Option(..., help="Your birthday in YYYY-MM-DD format", callback=validate_date),
manufacturer: Optional[List[ApprovedVaccine]] = typer.Option(..., help="The vaccine manufacturer", case_sensitive=False),
date: Optional[List[str]] = typer.Option(..., help="The date of vaccination", callback=validate_date)
):
"""Generate your vaccination QR code."""
# same logic as Click example
print(name, birth, manufacturer, date)
if __name__ == "__main__":
typer.run(main)
Docopt¶
"""Generate your vaccination QR code.
Usage:
cli.py (-n NAME) (-b BIRTH) (-m MANUFACTURER) [-m MANUFACTURER] (-d DATE) [-d DATE]
cli.py -h|--help
cli.py -v|--version
-n --name Your name
-b --birth Your birthday in YYYY-MM-DD format
-m --manufacturer The vaccine manufacturer
-d --date The date of vaccination
-h --help Show this screen.
-v --version Show version.
"""
from docopt import docopt
if __name__ == "__main__":
arguments = docopt(__doc__)
name = arguments["--name"]
birth = arguments["--birth"]
manufacturer = arguments["--manufacturer"]
date = arguments["--date"]
print(arguments)
Fire¶
import fire
def main(name, birth, manufacturer, date):
"""
Generate your vaccination QR code.
--name Your name.
--birth Your birthday in YYYY-MM-DD format
--manufacturer The vaccine manufacturer
--date The date of vaccination
"""
# custom validation like Argparser example
pass
if __name__ == "__main__":
fire.Fire(main)