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
# FIXME: we don't need to compact for int
class Memory(int):
def __new__(cls, value: Union[str, int]) -> "Memory":
if isinstance(value, str):

View File

@ -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")

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.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