feat: implement StrEnum for parser
Some checks failed
build / build (push) Failing after 2m19s
build / build (pull_request) Failing after 2m18s

This commit is contained in:
李衍志523370910113 2025-03-05 13:03:52 +08:00
parent 924325b933
commit 345f6daa32
3 changed files with 29 additions and 12 deletions

View File

@ -3,6 +3,7 @@ from typing import Union
import humanfriendly import humanfriendly
# FIXME: we don't need to compact for int
class Memory(int): class Memory(int):
def __new__(cls, value: Union[str, int]) -> "Memory": def __new__(cls, value: Union[str, int]) -> "Memory":
if isinstance(value, str): if isinstance(value, str):

View File

@ -1,4 +1,5 @@
from datetime import datetime, timedelta from datetime import datetime, timedelta
from enum import StrEnum
from pathlib import Path from pathlib import Path
from typing import Any, Dict, List, Type from typing import Any, Dict, List, Type
@ -80,6 +81,18 @@ class Limit(BaseModel):
raise ValueError("Must be a string") 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): class Stage(BaseModel):
name: str = "" # Stage name name: str = "" # Stage name
env: List[str] = [] env: List[str] = []
@ -88,7 +101,7 @@ class Stage(BaseModel):
in_: str = Field("", alias="in") in_: str = Field("", alias="in")
out_: str = Field("", alias="out") out_: str = Field("", alias="out")
score: int = 0 score: int = 0
parsers: List[str] = [] # list of parsers parsers: List[Parser] = [] # list of parsers
limit: Limit = Limit() limit: Limit = Limit()
dummy: ParserDummy = ParserDummy() dummy: ParserDummy = ParserDummy()
result_status: ParserDummy = Field(ParserDummy(), alias="result-status") result_status: ParserDummy = Field(ParserDummy(), alias="result-status")

View File

@ -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 import result, task
from joj3_config_generator.models.common import Memory, Time from joj3_config_generator.models.common import Memory, Time
from joj3_config_generator.models.const import JOJ3_CONFIG_ROOT 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( def get_conf_stage(
@ -32,7 +33,7 @@ def get_conf_stage(
if parser in processed_dict: if parser in processed_dict:
fn, parser_model = processed_dict[parser] fn, parser_model = processed_dict[parser]
fn(parser_model, conf_stage.parsers[idx]) fn(parser_model, conf_stage.parsers[idx])
elif parser == "diff": elif parser == parser_enum.DIFF:
fix_diff( fix_diff(
task_stage, task_stage,
conf_stage.parsers[idx], conf_stage.parsers[idx],
@ -46,16 +47,18 @@ def get_conf_stage(
def get_processed_dict( def get_processed_dict(
task_stage: task.Stage, task_stage: task.Stage,
) -> Dict[str, Tuple[Callable[[Any, result.Parser], None], Any]]: ) -> Dict[parser_enum, Tuple[Callable[[Any, result.Parser], None], Any]]:
processed_dict: Dict[str, Tuple[Callable[[Any, result.Parser], None], Any]] = { processed_dict: Dict[
"clangtidy": (fix_keyword, task_stage.clangtidy), parser_enum, Tuple[Callable[[Any, result.Parser], None], Any]
"keyword": (fix_keyword, task_stage.keyword), ] = {
"cppcheck": (fix_keyword, task_stage.cppcheck), parser_enum.CLANG_TIDY: (fix_keyword, task_stage.clangtidy),
"cpplint": (fix_keyword, task_stage.cpplint), parser_enum.KEYWORD: (fix_keyword, task_stage.keyword),
"result-detail": (fix_result_detail, task_stage.result_detail), parser_enum.CPPCHECK: (fix_keyword, task_stage.cppcheck),
"dummy": (fix_dummy, task_stage.dummy), parser_enum.CPPLINT: (fix_keyword, task_stage.cpplint),
"result-status": (fix_dummy, task_stage.result_status), parser_enum.RESULT_DETAIL: (fix_result_detail, task_stage.result_detail),
"file": (fix_file, task_stage.file), 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 return processed_dict