62 lines
1.8 KiB
Python
62 lines
1.8 KiB
Python
# coding: utf-8
|
|
from __future__ import absolute_import
|
|
from __future__ import division
|
|
from __future__ import print_function
|
|
from __future__ import unicode_literals
|
|
|
|
import argparse
|
|
import datetime
|
|
from functools import partial
|
|
|
|
from .get import get_data
|
|
from .get import most_recent_year
|
|
from .models import _load_users
|
|
from .utils import AOC_TZ
|
|
from .utils import _cli_guess
|
|
from .version import __version__
|
|
|
|
|
|
def main():
|
|
aoc_now = datetime.datetime.now(tz=AOC_TZ)
|
|
days = range(1, 26)
|
|
years = range(2015, aoc_now.year + int(aoc_now.month == 12))
|
|
users = _load_users()
|
|
parser = argparse.ArgumentParser(
|
|
description="Advent of Code Data v{}".format(__version__),
|
|
usage="aocd [day 1-25] [year 2015-{}]".format(years[-1]),
|
|
)
|
|
parser.add_argument(
|
|
"day",
|
|
nargs="?",
|
|
type=int,
|
|
default=min(aoc_now.day, 25) if aoc_now.month == 12 else 1,
|
|
help="1-25 (default: %(default)s)",
|
|
)
|
|
parser.add_argument(
|
|
"year",
|
|
nargs="?",
|
|
type=int,
|
|
default=most_recent_year(),
|
|
help="2015-{} (default: %(default)s)".format(years[-1]),
|
|
)
|
|
parser.add_argument(
|
|
"--version",
|
|
action="version",
|
|
version="%(prog)s v{}".format(__version__),
|
|
)
|
|
if len(users) > 1:
|
|
parser.add_argument("-u", "--user", choices=users, type=partial(_cli_guess, choices=users))
|
|
args = parser.parse_args()
|
|
if args.day in years and args.year in days:
|
|
# be forgiving
|
|
args.day, args.year = args.year, args.day
|
|
if args.day not in days or args.year not in years:
|
|
parser.print_usage()
|
|
parser.exit(1)
|
|
try:
|
|
session = users[args.user]
|
|
except (KeyError, AttributeError):
|
|
session = None
|
|
data = get_data(session=session, day=args.day, year=args.year)
|
|
print(data)
|