diff --git a/denis/configure.py b/denis/configure.py index 94ec12bd..1bef66f4 100755 --- a/denis/configure.py +++ b/denis/configure.py @@ -19,6 +19,12 @@ def add_initial(parser, required=True): help='Initial submission due date timestamp', required=required) + def add_peer_review(parser, required=True): + parser.add_argument('-p', '--peer-review', + type=int, + help='Peer review submission due date timestamp', + required=required) + def add_final(parser, required=True): parser.add_argument('-f', '--final', type=int, @@ -30,11 +36,13 @@ def add_final(parser, required=True): create_parser = command_parsers.add_parser('create') add_assignment(create_parser) add_initial(create_parser) + add_peer_review(create_parser) add_final(create_parser) alter_parser = command_parsers.add_parser('alter') add_assignment(alter_parser) add_initial(alter_parser, required=False) + add_peer_review(alter_parser, required=False) add_final(alter_parser, required=False) remove_parser = command_parsers.add_parser('remove') @@ -43,23 +51,32 @@ def add_final(parser, required=True): command_parsers.add_parser('dump') command_parsers.add_parser('reload') + # Dictionary containing the desired command and all flags with their values kwargs = vars(parser.parse_args()) - globals()[kwargs.pop('command')](**kwargs) + # Subparsers store their name in the destination `'command'` + subparser_name = kwargs.pop('command') + # Get a handle to the function with the desired name + subparser_func = globals()[subparser_name] + # Call the desired subparser with the remaining flags/values as kwargs + subparser_func(**kwargs) -def create(assignment, initial, final): +def create(assignment, initial, peer_review, final): try: db.Assignment.create(name=assignment, initial_due_date=initial, + peer_review_due_date=peer_review, final_due_date=final) except db.peewee.IntegrityError: print('cannot create assignment with duplicate name') -def alter(assignment, initial, final): +def alter(assignment, initial, peer_review, final): alterations = {} if initial is not None: alterations[db.Assignment.initial_due_date] = initial + if peer_review is not None: + alterations[db.Assignment.peer_review_due_date] = peer_review if final is not None: alterations[db.Assignment.final_due_date] = final if not alterations: @@ -84,6 +101,7 @@ def dump(): for asn in db.Assignment.select(): print(f'''{asn.name}: \tInitial: {asn.initial_due_date} +\tPeer Review: {asn.peer_review_due_date} \tFinal: {asn.final_due_date}''') diff --git a/denis/db.py b/denis/db.py index f5696100..0407269b 100755 --- a/denis/db.py +++ b/denis/db.py @@ -13,6 +13,7 @@ class Meta: class Assignment(BaseModel): name = peewee.TextField(unique=True) initial_due_date = peewee.IntegerField() + peer_review_due_date = peewee.IntegerField() final_due_date = peewee.IntegerField() diff --git a/denis/peer_review.py b/denis/peer_review.py new file mode 100755 index 00000000..05494ac1 --- /dev/null +++ b/denis/peer_review.py @@ -0,0 +1,2 @@ +#!/usr/bin/env python3 +print(__import__('sys').argv) diff --git a/denis/start.py b/denis/start.py index 8d9ddd7e..e0c1f044 100755 --- a/denis/start.py +++ b/denis/start.py @@ -31,6 +31,7 @@ def signal_handler(*_): for assignment in db.Assignment.select(): name = assignment.name initial = assignment.initial_due_date + peer_review = assignment.peer_review_due_date final = assignment.final_due_date if in_the_future(initial): @@ -38,6 +39,11 @@ def signal_handler(*_): else: print(f'skipping initial for {name}', file=sys.stderr) + if in_the_future(peer_review): + procs.append(spawn_waiter(str(peer_review), name, './peer_review.py')) # NOQA: E501 + else: + print(f'skipping peer review for {name}', file=sys.stderr) + if in_the_future(final): procs.append(spawn_waiter(str(final), name, './final.py')) else: