From 7c764ab2cb507d181f81f16096cc88082a6e9fde Mon Sep 17 00:00:00 2001 From: Boming Zhang Date: Mon, 30 Jun 2025 06:23:41 -0400 Subject: [PATCH] feat: task.name -> name in task.toml --- joj3_config_generator/generator.py | 2 +- joj3_config_generator/models/task.py | 12 ++++++++++-- joj3_config_generator/transformers/answer.py | 6 +++--- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/joj3_config_generator/generator.py b/joj3_config_generator/generator.py index f41843d..3366c5c 100644 --- a/joj3_config_generator/generator.py +++ b/joj3_config_generator/generator.py @@ -27,7 +27,7 @@ def convert_joj1_conf(joj1_conf: joj1.Config) -> task.Config: def convert_joj3_conf(repo_conf: repo.Config, task_conf: task.Config) -> result.Config: # Create the base ResultConf object result_conf = result.Config( - name=task_conf.task.name, + name=task_conf.name, # exact folder difference specified by type log_path=str(JOJ3_LOG_BASE_PATH / task_conf.suffix / JOJ3_LOG_FILENAME), # TODO: remove these 2 fields, will be handled in the health check stage diff --git a/joj3_config_generator/models/task.py b/joj3_config_generator/models/task.py index 7fe51be..73c1ac1 100644 --- a/joj3_config_generator/models/task.py +++ b/joj3_config_generator/models/task.py @@ -266,7 +266,8 @@ class Config(BaseModel): path: Path = Field(Path("task.toml"), exclude=True) suffix: str = Field("", exclude=True) - task: Task = Task() # Task name (e.g., hw3 ex5) + task: Task = Task() # TODO: remove it in the future + name: str = "unknown" # Task name (e.g., hw3 ex5) max_total_score: Optional[int] = Field( None, validation_alias=AliasChoices("max-total-score", "max_total_score") ) @@ -277,10 +278,17 @@ class Config(BaseModel): penalties: Penalties = Penalties() stages: List[Stage] = [] # list of stage configurations + # TODO: remove this validator in the future + @model_validator(mode="after") + def set_name(self) -> "Config": + if "task" in self.model_fields_set and "name" in self.task.model_fields_set: + self.name = self.task.name + return self + @model_validator(mode="after") def set_suffix(self) -> "Config": if not self.suffix: - self.suffix = re.split(r"[-_/\s]+", self.task.name)[0] + self.suffix = re.split(r"[-_/\s]+", self.name)[0] return self @model_validator(mode="after") diff --git a/joj3_config_generator/transformers/answer.py b/joj3_config_generator/transformers/answer.py index 220199d..082c274 100644 --- a/joj3_config_generator/transformers/answer.py +++ b/joj3_config_generator/transformers/answer.py @@ -9,16 +9,16 @@ def get_task_conf_from_answers(answers: answer.Answers) -> task.Config: if answers.template_file_content: toml_dict = tomli.loads(answers.template_file_content) return task.Config( - task=task.Task(name=answers.name), + name=answers.name, stages=toml_dict["stages"], ) language = answers.language transformer_dict = get_transformer_dict() if language not in transformer_dict: - return task.Config(task=task.Task(name=answers.name), stages=[]) + return task.Config(name=answers.name, stages=[]) transformer = transformer_dict[language] stages = transformer(language) - return task.Config(task=task.Task(name=answers.name), stages=stages) + return task.Config(name=answers.name, stages=stages) def get_transformer_dict() -> Dict[