import argparse from worker import GitWorker, GiteaWorker, JOJWorker, CanvasWorker from problem_info import problem_info from config import * parser = argparse.ArgumentParser("leningrade") parser.add_argument( "-n", "--homework-number", type=int, required=True, help="An integer. For h1, the value should be 1.", ) parser.add_argument( "-i", "--homework-id", required=False, help=( "A hexadecimal string obtained from the JOJ URL of the homework. " "Can be omitted if -J is set." ), ) parser.add_argument( "-I", "--no-individual", action="store_true", default=False, help="Do not check individual submissions.", ) parser.add_argument( "-G", "--no-group", action="store_true", default=False, help="Do not check group submission.", ) parser.add_argument( "-J", "--no-joj", action="store_true", default=False, help=( "Do not upload group code to JOJ. JOJ may consume a lot of time. " "Set this flag if your group work has proven to pass JOJ." ), ) cli_args = parser.parse_args() class Arguments: hw = cli_args.homework_number rejudge = HGROUP_NO # I do not understand the naming dir = True tidy = True score = True args = Arguments() gitWorker = GitWorker(args, HGROUP, None, LANGUAGE, MANDATORY_FILES, OPTIONAL_FILES) giteaWorker = GiteaWorker(args, GITEA_API_BASE, GITEA_ORG, GITEA_TOKEN, HGROUP) jojWorker = JOJWorker(args, JOJ_COURSE_ID, JOJ_SESSION_ID, HGROUP) indvScores = {} groupScores = {} jojScores = {} # individual if not cli_args.no_individual: print("Checking individual submissions...") indvScores = gitWorker.checkIndv() # group if not cli_args.no_group: print("Checking group submissions...") groupScores = gitWorker.checkGroup() tmpScores = giteaWorker.checkReview() for key in groupScores.keys(): groupScores[key] = {**groupScores.get(key, {}), **tmpScores.get(key, {})} # JOJ (This will consume a lot of time when the code is in MATLAB) if not cli_args.no_joj: JOJ_INFO = { "homeworkID": cli_args.homework_id, "lang": LANGUAGE, # "problemInfo": [ # # filenames, problem ID, # of test cases # (["ex2.m"], "61553cffb3c06a0006f45da3", 10), # (["ex4.m"], "61553e5fb3c06a0006f45da9", 10), # (["ex5.m"], "61553f8cb3c06a0006f45db2", 10), # (["ex6.m"], "6155414cb3c06a0006f45dc7", 10), # ], "problemInfo": problem_info(cli_args.homework_id), } print("JOJ is now running (this may take a while)...") jojScores = jojWorker.checkGroupJOJ(JOJ_INFO) # initialize a CanvasWorker instance so that we can output grades # the way they do it on Canvas member_names = [member[1] for member in HGROUP_MEMBERS] canvasWorker = CanvasWorker( args, RUBRIC, None, None, member_names, indvScores, groupScores, jojScores, ) scoreInfo = canvasWorker.scores for member in member_names: print(f"===== {member} =====") data = canvasWorker.generateHomeworkData(scoreInfo[member]) print("Grade: " + str(data["submission"]["posted_grade"])) print(data["comment"]["text_comment"]) print("\n")