def getter(question_number, test_number, test_set, code): if question_number not in test_set: raise Container( error(f"Question {question_number} not found in homework", code)) if test_number not in test_set[question_number]: raise Container( error( f"Test {test_number} not found in Question {question_number}", code)) return test_set[question_number][test_number]
def process(homework_number, question_number): data = request.args if "token" not in data: return error("The token is not included", "token_missing") if data["token"] != app.config["TOKEN"]: return error("The token is not correct/is invalid", "token_wrong") if homework_number not in available_homeworks: return error(f"There is no homework {homework_number}", "no_homework") if "test" not in data: return error("The test parameter is not included", "no_test") return available_homeworks[homework_number].get_test( question_number, str(data["test"]))
def reload_tests(homework_number): if not request.is_json: return error("Sent format is not a json", "json") data = request.get_json() if "token" not in data: return error("The token is not included", "token_missing") if data["token"] != app.config["ADMIN_TOKEN"]: return error("The token is not correct/is invalid", "token_wrong") if homework_number not in available_homeworks: return error(f"There is no homework {homework_number}", "no_homework") available_homeworks[homework_number].reload_tests() return "OK"
def autocheck(homework_number, question_number): if not request.is_json: return error("Sent format is not a json", "json") data = request.get_json() if "token" not in data: return error("The token is not included", "token_missing") if data["token"] != app.config["TOKEN"]: return error("The token is not correct/is invalid", "token_wrong") if homework_number not in available_homeworks: return error(f"There is no homework {homework_number}", "no_homework") return available_homeworks[homework_number].check( question_number=question_number, data=data)
def check(question_number, test_number, student_answer): try: value = getter(question_number, test_number, __tests_expected, "test_output") except Container as e: return e.data try: status, result, comments = numpy_isclose(value, student_answer) except InvalidInput as e: return error(message=e.msg, code="invalid_input") else: return send_results(status=status, mask=result, comments=comments)
def check(question_number, data): if not __tests_expected: load_tests() try: test = extract_argument(data, "test") student_answer = extract_argument(data, "student_answer") value = test_getter(question_number, test, __tests_expected, "test_output") try: status, result, comments = numpy_isclose(value, student_answer, msg="value") except InvalidInput as e: return error(message=e.msg, code="invalid_input") else: return send_results(status=status, mask=result, comments=comments) except Container as e: return e.data
def autocheck(homework_number, question_number): if not request.is_json: return error("Sent format is not a json", "json") data = request.get_json() if "token" not in data: return error("The token is not included", "token_missing") if data["token"] != "mytoken": return error("The token is not correct/is invalid", "token_wrong") if homework_number not in available_homeworks: return error(f"There is no homework {homework_number}", "no_homework") if "answer" not in data: return error("The answer parameter is not included", "no_answer") if "test" not in data: return error("The test parameter is not included", "no_test") return available_homeworks[homework_number].check(question_number, str(data["test"]), data["answer"])
def check(question_number, data): if not __tests_expected: load_tests() try: test = extract_argument(data, "test") student_answer = extract_argument(data, "student_answer") student_time = extract_argument(data, "time") expected = test_getter(question_number, test, __tests_expected, "test_output") expected_value = expected["value"] expected_time = expected["time"] try: value_status, value_result, value_comments = numpy_isclose( expected_value, student_answer, msg="value", equal_nan=True) time_status, time_result, time_comments = simple_max_value( expected_time, student_time, msg="time") except InvalidInput as e: return error(message=e.msg, code="invalid_input") else: if value_status == 0: return send_results(status=value_status, mask=value_result, comments=value_comments) elif time_status == 0: return send_results(status=time_status, mask=time_result, comments=time_comments) else: return send_results(status=1, mask=[], comments="Correct Test.") except Container as e: return e.data
def extract_argument(data, arg_name): try: return data[arg_name] except KeyError: raise Container(error(f"Missing argument `{arg_name}`", "missing_arg"))