From 694fd184313a99980710627e648dd8a0bafed307 Mon Sep 17 00:00:00 2001 From: Angus Ritossa Date: Wed, 14 Feb 2024 11:42:46 +1100 Subject: [PATCH 01/17] display provided subtask name, rather than automatically using 1-indexing --- cms/grading/scoretypes/abc.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cms/grading/scoretypes/abc.py b/cms/grading/scoretypes/abc.py index f0fe3e3dd2..930fc6cd9d 100644 --- a/cms/grading/scoretypes/abc.py +++ b/cms/grading/scoretypes/abc.py @@ -218,7 +218,7 @@ class ScoreTypeGroup(ScoreTypeAlone): {% endif %}
- {% trans index=st["idx"] %}Subtask {{ index }}{% endtrans %} + {% trans name=st["name"] %}{{ name }}{% endtrans %} {% if "score_fraction" in st and "max_score" in st %} {% set score = st["score_fraction"] * st["max_score"] %} @@ -427,6 +427,7 @@ def compute_score(self, submission_result): # correct or incorrect. "score_fraction": st_score_fraction, "max_score": parameter[0], + "name": parameter[2], "testcases": testcases}) if all(self.public_testcases[tc_idx] for tc_idx in target): public_score += st_score From 738fca32a53f2fbf6b8dc48be9f1599252698d96 Mon Sep 17 00:00:00 2001 From: Angus Ritossa Date: Wed, 14 Feb 2024 13:13:48 +1100 Subject: [PATCH 02/17] fix restricted feedback: show all test cases up to the first lowest-scoring case --- cms/grading/scoretypes/abc.py | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/cms/grading/scoretypes/abc.py b/cms/grading/scoretypes/abc.py index 930fc6cd9d..d5a22c8b3b 100644 --- a/cms/grading/scoretypes/abc.py +++ b/cms/grading/scoretypes/abc.py @@ -392,10 +392,13 @@ def compute_score(self, submission_result): testcases = [] public_testcases = [] - previous_tc_all_correct = True + + restricted_feedback_idx = None + restricted_feedback_outcome = None + for tc_idx in target: - tc_outcome = self.get_public_outcome( - float(evaluations[tc_idx].outcome), parameter) + outcome = float(evaluations[tc_idx].outcome) + tc_outcome = self.get_public_outcome(outcome, parameter) testcases.append({ "idx": tc_idx, @@ -403,14 +406,13 @@ def compute_score(self, submission_result): "text": evaluations[tc_idx].text, "time": evaluations[tc_idx].execution_time, "memory": evaluations[tc_idx].execution_memory, - "show_in_restricted_feedback": previous_tc_all_correct}) + "show_in_restricted_feedback": True}) if self.public_testcases[tc_idx]: public_testcases.append(testcases[-1]) - # Only block restricted feedback if this is the first - # *public* non-correct testcase, otherwise we might be - # leaking info on private testcases. - if tc_outcome != "Correct": - previous_tc_all_correct = False + + if restricted_feedback_outcome is None or outcome < restricted_feedback_outcome: + restricted_feedback_outcome = outcome + restricted_feedback_idx = tc_idx else: public_testcases.append({"idx": tc_idx}) @@ -419,6 +421,10 @@ def compute_score(self, submission_result): parameter) st_score = st_score_fraction * parameter[0] + if st_score_fraction < 1.0 and parameter[0] > 0: # display full feedback for sample cases + for t in testcases: + t["show_in_restricted_feedback"] = (t["idx"] <= restricted_feedback_idx) + score += st_score subtasks.append({ "idx": st_idx + 1, From 00ce5edca0142ab130b9423ef0cf7a99db6cf7d3 Mon Sep 17 00:00:00 2001 From: Angus Ritossa Date: Fri, 12 Jul 2024 11:36:16 +1000 Subject: [PATCH 03/17] hide old/upcoming contests --- cms/server/contest/handlers/base.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/cms/server/contest/handlers/base.py b/cms/server/contest/handlers/base.py index 00e24c273f..e31ad008b3 100644 --- a/cms/server/contest/handlers/base.py +++ b/cms/server/contest/handlers/base.py @@ -31,6 +31,7 @@ import logging import traceback +from datetime import datetime, timedelta try: import tornado4.web as tornado_web @@ -168,6 +169,11 @@ def get(self): # able to import new contests without having to restart CWS. contest_list = dict() for contest in self.sql_session.query(Contest).all(): - contest_list[contest.name] = contest + # We hide contests that ended more than a week ago, or start more than a week from now + today = datetime.now() + seven_days_ago = today - timedelta(days=7) + seven_days_ahead = today + timedelta(days=7) + if contest.start < seven_days_ahead and contest.stop > seven_days_ago: + contest_list[contest.name] = contest self.render("contest_list.html", contest_list=contest_list, **self.r_params) From 1a1df035f540b11fad96543d5ccece0c5230af67 Mon Sep 17 00:00:00 2001 From: Angus Ritossa Date: Tue, 13 Aug 2024 20:39:26 +1000 Subject: [PATCH 04/17] add are you sure popup before rejudging all subs --- .../templates/macro/reevaluation_buttons.html | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/cms/server/admin/templates/macro/reevaluation_buttons.html b/cms/server/admin/templates/macro/reevaluation_buttons.html index 7e769d0cd9..c71de755de 100644 --- a/cms/server/admin/templates/macro/reevaluation_buttons.html +++ b/cms/server/admin/templates/macro/reevaluation_buttons.html @@ -35,7 +35,8 @@ {% elif contest_id is not none %} {% set invalidate_arguments = {"contest_id": contest_id} %} {% endif %} - - - - -