chore: load auth from .env file

This commit is contained in:
2026-02-17 19:30:34 +01:00
parent f783ff0d6d
commit 93377a0295
3 changed files with 50 additions and 8 deletions

3
.env.example Normal file
View File

@@ -0,0 +1,3 @@
# Advent of Code Session Token
# Get your session token from browser cookies after logging in at https://adventofcode.com
AOC_SESSION=your_session_token_here

View File

@@ -4,6 +4,16 @@ My solutions to the [advent of code](https://adventofcode.com/) challenges, writ
## How to run ## How to run
### Setup
To use, you need a session token from Advent of Code:
1. Log in at https://adventofcode.com
2. Copy your session cookie (check browser dev tools)
3. Either:
- Set `AOC_SESSION` environment variable, or
- Create a `.env` file in project root with: `AOC_SESSION=your_token`
### Install project ### Install project
Run `make install` or Run `make install` or

View File

@@ -1,6 +1,5 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import urllib.request import urllib.request
import getpass
import sys import sys
import time import time
import subprocess import subprocess
@@ -12,13 +11,39 @@ ROOTPATH = Path(os.path.dirname(os.path.realpath(__file__)))
_auth = None _auth = None
def _load_env_file(env_path: Path) -> dict:
env = {}
if not env_path.exists():
return env
with open(env_path) as f:
for line in f:
line = line.strip()
if not line or line.startswith("#"):
continue
if "=" in line:
key, value = line.split("=", 1)
env[key.strip()] = value.strip().strip('"').strip("'")
return env
def get_auth(): def get_auth():
global _auth global _auth
if _auth is None: if _auth is not None:
if "AUTH" in os.environ: return
_auth = os.environ["AUTH"]
else: _auth = os.environ.get("AOC_SESSION")
_auth = getpass.getpass(prompt="Cookie: ")
if not _auth:
env_file = ROOTPATH.parent / ".env"
env = _load_env_file(env_file)
_auth = env.get("AOC_SESSION")
if not _auth:
raise RuntimeError(
"AOC_SESSION not set. Either:\n"
" - Set AOC_SESSION environment variable, or\n"
" - Create a .env file in project root with: AOC_SESSION=your_token"
)
def get_input_file(year, day): def get_input_file(year, day):
@@ -64,10 +89,14 @@ def run_day(script_path, input_path):
try: try:
print(f"> running {script_path}") print(f"> running {script_path}")
start = time.time() start = time.time()
res = subprocess.run([sys.executable, script_path.absolute(), input_path.absolute()], check=True, stdout=subprocess.PIPE, timeout=30) res = subprocess.run(
[sys.executable, script_path.absolute(), input_path.absolute()],
check=True,
stdout=subprocess.PIPE,
timeout=30,
)
elapsed = time.time() - start elapsed = time.time() - start
print(res.stdout.decode()) print(res.stdout.decode())
print(f"> ran {script_path} in {elapsed:.3f}s") print(f"> ran {script_path} in {elapsed:.3f}s")
except subprocess.TimeoutExpired: except subprocess.TimeoutExpired:
print(f"> timeout {script_path} after 30s", file=sys.stderr) print(f"> timeout {script_path} after 30s", file=sys.stderr)