From a4698b67ea0da3aeadd301649921ec79836ed8dd Mon Sep 17 00:00:00 2001 From: Kian Mirjalali Date: Wed, 3 Aug 2022 23:58:50 +0430 Subject: [PATCH 1/4] Improve tps loarder: Add & support protocol_version --- cmscontrib/loaders/tps.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/cmscontrib/loaders/tps.py b/cmscontrib/loaders/tps.py index aacbea9ee4..3c7617f341 100644 --- a/cmscontrib/loaders/tps.py +++ b/cmscontrib/loaders/tps.py @@ -116,6 +116,21 @@ def get_task(self, get_statement=True): with open(json_src, 'rt', encoding='utf-8') as json_file: data = json.load(json_file) + if "protocol_version" in data: + self.protocol_version = data["protocol_version"] + logger.info("protocol_version=%s" % str(self.protocol_version)) + else: + self.protocol_version = 1 + logger.info("The protocol_version is not defined. Setting to default value: %s" % str(self.protocol_version)) + + if not isinstance(self.protocol_version, int): + logger.critical("Given protocol_version is not an integer") + return None + + if not (1 <= self.protocol_version <= 1): + logger.critical("Invalid protocol_version %d" % self.protocol_version) + return None + name = data['code'] logger.info("Loading parameters for task %s.", name) From 3feec25a1c2a86392ecebd43972b1c04d0b5197d Mon Sep 17 00:00:00 2001 From: Kian Mirjalali Date: Thu, 4 Aug 2022 00:26:01 +0430 Subject: [PATCH 2/4] Improve tps loader: Add protocol version 2 --- cmscontrib/loaders/tps.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmscontrib/loaders/tps.py b/cmscontrib/loaders/tps.py index 3c7617f341..8a015b47eb 100644 --- a/cmscontrib/loaders/tps.py +++ b/cmscontrib/loaders/tps.py @@ -42,7 +42,7 @@ class TpsTaskLoader(TaskLoader): """ short_name = 'tps_task' - description = 'TPS task format' + description = 'TPS task format (version 2)' @staticmethod def detect(path): @@ -127,7 +127,7 @@ def get_task(self, get_statement=True): logger.critical("Given protocol_version is not an integer") return None - if not (1 <= self.protocol_version <= 1): + if not (1 <= self.protocol_version <= 2): logger.critical("Invalid protocol_version %d" % self.protocol_version) return None From 468ce176e437fe473f0005e2aeca4b5f5f83b723 Mon Sep 17 00:00:00 2001 From: Kian Mirjalali Date: Thu, 4 Aug 2022 00:27:18 +0430 Subject: [PATCH 3/4] Improve tps loader (v2): Read task type parameters completely from the json file --- cmscontrib/loaders/tps.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/cmscontrib/loaders/tps.py b/cmscontrib/loaders/tps.py index 8a015b47eb..6f703b6ffd 100644 --- a/cmscontrib/loaders/tps.py +++ b/cmscontrib/loaders/tps.py @@ -58,6 +58,18 @@ def task_has_changed(self): return True def _get_task_type_parameters(self, data, task_type, evaluation_param): + if self.protocol_version >= 2: + # Task type parameters are completely specified in the json file. + task_type_params = data.get('task_type_params') + if task_type_params is None: + logger.critical("'task_type_params' is not provided.") + return None + if not isinstance(task_type_params, list): + logger.critical("Given 'task_type_params' is not a list.") + return None + return task_type_params + + # protocol_version 1: Create the task type parameters manually... parameters_str = data['task_type_params'] if parameters_str is None or parameters_str == '': parameters_str = '{}' @@ -266,6 +278,9 @@ def get_task(self, get_statement=True): self._get_task_type_parameters( data, data['task_type'], evaluation_param) + if args["task_type_parameters"] is None: + return None + # Graders graders_dir = os.path.join(self.path, 'graders') From 6a6f723dcac481cd8f7b9dc39af4d543cf6ee963 Mon Sep 17 00:00:00 2001 From: Kian Mirjalali Date: Thu, 4 Aug 2022 00:36:17 +0430 Subject: [PATCH 4/4] Improve tps loader (v2): Read score_mode from the json file with SCORE_MODE_MAX_SUBTASK as its default --- cmscontrib/loaders/tps.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cmscontrib/loaders/tps.py b/cmscontrib/loaders/tps.py index 6f703b6ffd..9e7e64f269 100644 --- a/cmscontrib/loaders/tps.py +++ b/cmscontrib/loaders/tps.py @@ -26,6 +26,7 @@ from datetime import timedelta from cms.db import Task, Dataset, Manager, Testcase, Attachment, Statement +from cmscommon.constants import SCORE_MODE_MAX_SUBTASK from .base_loader import TaskLoader @@ -150,6 +151,7 @@ def get_task(self, get_statement=True): args["name"] = name args["title"] = data['name'] + args["score_mode"] = data.get("score_mode", SCORE_MODE_MAX_SUBTASK) # Statements if get_statement: