import argparse import importlib import os from typing import List def day(assignment_part: str) -> str: return { '1': 'One', '2': 'Two', }[assignment_part] def kwargs(kwarg: str) -> List: return kwarg.split('=') parser = argparse.ArgumentParser(description='Advent of Code') parser.add_argument('day', type=str, help='Assignment day') parser.add_argument( '-p', '--part', type=day, nargs='?', default='1', help='Assingment part. Defaults to one.' ) parser.add_argument('--example', default=False, action='store_true') parser.add_argument('kwargs', type=kwargs, nargs='*') if __name__ == '__main__': args = parser.parse_args() assignment_day = importlib.import_module(args.day) Assignment = getattr(assignment_day, f'Assignment{args.part}') assignment = Assignment( path=os.path.dirname(assignment_day.__file__), **dict(args.kwargs) ) print( assignment.run( input=assignment.read_input(example=args.example), ) )