Skip to content

Commit 790e599

Browse files
authored
expose puzzle at the top level (#149)
1 parent f4850c2 commit 790e599

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

aocd/__init__.py

+5
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
"get_data",
3030
"models",
3131
"post",
32+
"puzzle",
3233
"runner",
3334
"submit",
3435
"types",
@@ -37,13 +38,17 @@
3738

3839
if t.TYPE_CHECKING:
3940
data: str
41+
puzzle: models.Puzzle
4042
submit = _impartial_submit
4143

4244

4345
def __getattr__(name: str) -> t.Any:
4446
if name == "data":
4547
day, year = get_day_and_year()
4648
return get_data(day=day, year=year)
49+
if name == "puzzle":
50+
day, year = get_day_and_year()
51+
return get.get_puzzle(day=day, year=year)
4752
if name == "submit":
4853
try:
4954
day, year = get_day_and_year()

aocd/get.py

+34
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,40 @@ def get_data(
5454
return puzzle.input_data
5555

5656

57+
def get_puzzle(
58+
session: str | None = None,
59+
day: int | None = None,
60+
year: int | None = None,
61+
block: bool = False,
62+
) -> Puzzle:
63+
"""
64+
Get puzzle for day (1-25) and year (2015+).
65+
User's session cookie (str) is needed - puzzle inputs differ by user.
66+
If `block` is True and the puzzle is still locked, will wait until unlock
67+
before returning data.
68+
"""
69+
if session is None:
70+
user = default_user()
71+
else:
72+
user = User(token=session)
73+
if day is None:
74+
day = current_day()
75+
log.info("current day=%s", day)
76+
if year is None:
77+
year = most_recent_year()
78+
log.info("most recent year=%s", year)
79+
puzzle = Puzzle(year=year, day=day, user=user)
80+
try:
81+
_ = puzzle.input_data
82+
return puzzle
83+
except PuzzleLockedError:
84+
if not block:
85+
raise
86+
q = block == "q"
87+
blocker(quiet=q, until=(year, day))
88+
return puzzle
89+
90+
5791
def most_recent_year() -> int:
5892
"""
5993
This year, if it's December.

0 commit comments

Comments
 (0)