Files
aoc-template-py/aoc/cli.py
2025-11-17 00:18:45 -03:00

72 lines
1.9 KiB
Python

import argparse
import datetime
def get_latest_event_year() -> int:
now = datetime.datetime.now()
year = now.year
if now.month < 12:
year -= 1
return year
def argument_parser() -> argparse.ArgumentParser:
parser = argparse.ArgumentParser(description="aoc")
subcli = parser.add_subparsers(title="command", required=True, dest="command")
solve = subcli.add_parser("solve", help="solve a given day's puzzle")
solve.add_argument(
"-e",
"--example",
action="store_true",
required=False,
help="use example input file instead of real input file",
)
solve.add_argument(
"-y",
"--year",
type=int,
required=False,
help="year of the puzzle (default: current year)",
default=get_latest_event_year(),
)
solve.add_argument("day", type=int, help="day of the puzzle (1-25)")
create = subcli.add_parser(
"create", help="create template and input files for a given day's puzzle"
)
create.add_argument(
"-y",
"--year",
type=int,
required=False,
help="year of the puzzle (default: current year)",
default=get_latest_event_year(),
)
create.add_argument("day", type=int, help="day of the puzzle (1-25)")
download = subcli.add_parser(
"download", help="download input file for a given day's puzzle"
)
download.add_argument(
"-f",
"--force",
action="store_true",
required=False,
help="force re-download even if input file already exists",
)
download.add_argument(
"-y",
"--year",
type=int,
required=False,
help="year of the puzzle (default: current year)",
default=get_latest_event_year(),
)
download.add_argument("day", type=int, help="day of the puzzle (1-25)")
return parser