diff --git a/adventofcode/aoc.py b/adventofcode/aoc.py index 3154174..092e036 100644 --- a/adventofcode/aoc.py +++ b/adventofcode/aoc.py @@ -1,6 +1,6 @@ import argparse -from adventofcode.helper import init, run, run_all +from adventofcode.helper import init, run, run_all, validate_year def year_or_all(value): @@ -9,12 +9,10 @@ def year_or_all(value): return value try: year = int(value) - if 2015 <= year <= 2025: + if (err := validate_year(year)) is None: return year else: - raise argparse.ArgumentTypeError( - f"Year must be between 2015 and 2025. Got: {year}" - ) + raise argparse.ArgumentTypeError(err) except ValueError: raise argparse.ArgumentTypeError( f"Invalid value: {value}. Must be an integer or 'all'." diff --git a/adventofcode/helper.py b/adventofcode/helper.py index 7f3dcec..510fe09 100644 --- a/adventofcode/helper.py +++ b/adventofcode/helper.py @@ -20,7 +20,7 @@ def main(inp): if __name__ == '__main__': with fileinput.input() as f: - lines = [x.rstrip() for x in fileinput.input()] + lines = [x.rstrip() for x in f] main(lines) """ @@ -169,16 +169,22 @@ def run(year, day): def run_day(script_path, input_path): try: - print(f"> running {script_path}") + print(f"> running {script_path}\n") start = time.time() res = subprocess.run( [sys.executable, script_path.absolute(), input_path.absolute()], - check=True, + check=False, stdout=subprocess.PIPE, timeout=30, ) elapsed = time.time() - start - print(res.stdout.decode()) - print(f"> ran {script_path} in {elapsed:.3f}s") + if res.returncode != 0: + print( + f"> {script_path} failed with exit code {res.returncode}", + file=sys.stderr, + ) + else: + print(res.stdout.decode()) + print(f"\n> ran {script_path} in {elapsed:.3f}s") except subprocess.TimeoutExpired: print(f"> timeout {script_path} after 30s", file=sys.stderr)