diff --git a/joj3_config_generator/models/common.py b/joj3_config_generator/models/common.py index 438f77d..061ecf1 100644 --- a/joj3_config_generator/models/common.py +++ b/joj3_config_generator/models/common.py @@ -3,6 +3,7 @@ from typing import Union import humanfriendly +# FIXME: we don't need to compact for int class Memory(int): def __new__(cls, value: Union[str, int]) -> "Memory": if isinstance(value, str): diff --git a/joj3_config_generator/models/task.py b/joj3_config_generator/models/task.py index f3171d0..2b39cad 100644 --- a/joj3_config_generator/models/task.py +++ b/joj3_config_generator/models/task.py @@ -1,4 +1,5 @@ from datetime import datetime, timedelta +from enum import StrEnum from pathlib import Path from typing import Any, Dict, List, Type @@ -80,6 +81,18 @@ class Limit(BaseModel): raise ValueError("Must be a string") +class Parser(StrEnum): + CLANG_TIDY = "clangtidy" + CPPCHECK = "cppcheck" + CPPLINT = "cpplint" + KEYWORD = "keyword" + RESULT_STATUS = "result-status" + RESULT_DETAIL = "result-detail" + DUMMY = "dummy" + FILE = "file" + DIFF = "diff" + + class Stage(BaseModel): name: str = "" # Stage name env: List[str] = [] @@ -88,7 +101,7 @@ class Stage(BaseModel): in_: str = Field("", alias="in") out_: str = Field("", alias="out") score: int = 0 - parsers: List[str] = [] # list of parsers + parsers: List[Parser] = [] # list of parsers limit: Limit = Limit() dummy: ParserDummy = ParserDummy() result_status: ParserDummy = Field(ParserDummy(), alias="result-status") diff --git a/joj3_config_generator/processers/task.py b/joj3_config_generator/processers/task.py index ddca853..d18b341 100644 --- a/joj3_config_generator/processers/task.py +++ b/joj3_config_generator/processers/task.py @@ -6,6 +6,7 @@ from typing import Any, Callable, Dict, List, Tuple from joj3_config_generator.models import result, task from joj3_config_generator.models.common import Memory, Time from joj3_config_generator.models.const import JOJ3_CONFIG_ROOT +from joj3_config_generator.models.task import Parser as parser_enum def get_conf_stage( @@ -32,7 +33,7 @@ def get_conf_stage( if parser in processed_dict: fn, parser_model = processed_dict[parser] fn(parser_model, conf_stage.parsers[idx]) - elif parser == "diff": + elif parser == parser_enum.DIFF: fix_diff( task_stage, conf_stage.parsers[idx], @@ -46,16 +47,18 @@ def get_conf_stage( def get_processed_dict( task_stage: task.Stage, -) -> Dict[str, Tuple[Callable[[Any, result.Parser], None], Any]]: - processed_dict: Dict[str, Tuple[Callable[[Any, result.Parser], None], Any]] = { - "clangtidy": (fix_keyword, task_stage.clangtidy), - "keyword": (fix_keyword, task_stage.keyword), - "cppcheck": (fix_keyword, task_stage.cppcheck), - "cpplint": (fix_keyword, task_stage.cpplint), - "result-detail": (fix_result_detail, task_stage.result_detail), - "dummy": (fix_dummy, task_stage.dummy), - "result-status": (fix_dummy, task_stage.result_status), - "file": (fix_file, task_stage.file), +) -> Dict[parser_enum, Tuple[Callable[[Any, result.Parser], None], Any]]: + processed_dict: Dict[ + parser_enum, Tuple[Callable[[Any, result.Parser], None], Any] + ] = { + parser_enum.CLANG_TIDY: (fix_keyword, task_stage.clangtidy), + parser_enum.KEYWORD: (fix_keyword, task_stage.keyword), + parser_enum.CPPCHECK: (fix_keyword, task_stage.cppcheck), + parser_enum.CPPLINT: (fix_keyword, task_stage.cpplint), + parser_enum.RESULT_DETAIL: (fix_result_detail, task_stage.result_detail), + parser_enum.DUMMY: (fix_dummy, task_stage.dummy), + parser_enum.RESULT_STATUS: (fix_dummy, task_stage.result_status), + parser_enum.FILE: (fix_file, task_stage.file), } return processed_dict