feat: cases data reading for diff
This commit is contained in:
parent
b1f5d4c953
commit
135c38f83b
|
@ -20,7 +20,12 @@ from joj3_config_generator.lib.task import (
|
|||
)
|
||||
from joj3_config_generator.models import joj1, repo, result, task
|
||||
from joj3_config_generator.lib.repo import getHealthcheckConfig, getTeapotConfig
|
||||
from joj3_config_generator.lib.task import fix_comment, fix_keyword, fix_result_detail
|
||||
from joj3_config_generator.lib.task import (
|
||||
fix_comment,
|
||||
fix_diff,
|
||||
fix_keyword,
|
||||
fix_result_detail,
|
||||
)
|
||||
from joj3_config_generator.models import (
|
||||
Cmd,
|
||||
CmdFile,
|
||||
|
@ -87,7 +92,7 @@ def convert(repo_conf: repo.Config, task_conf: task.Config) -> result.Config:
|
|||
conf_stage = fix_comment(task_stage, conf_stage)
|
||||
conf_stage = fix_keyword(task_stage, conf_stage)
|
||||
# TODO: fix diff parser here
|
||||
|
||||
conf_stage = fix_diff(task_stage, conf_stage)
|
||||
result_conf.stage.stages.append(conf_stage)
|
||||
|
||||
return result_conf
|
||||
|
|
|
@ -1,27 +1,32 @@
|
|||
import rtoml
|
||||
|
||||
from joj3_config_generator.models.result import Stage as ResultStage
|
||||
from joj3_config_generator.models.task import Stage as TaskStage
|
||||
|
||||
|
||||
def fix_keyword(task_stage: TaskStage, conf_stage: ResultStage) -> ResultStage:
|
||||
keyword_parser = ["clangtidy", "keyword", "cppcheck"] # TODO: may add cpplint
|
||||
for parser in task_stage.parsers:
|
||||
if parser in keyword_parser:
|
||||
keyword_parser_ = next(p for p in conf_stage.parsers if p.name == parser)
|
||||
keyword_weight = []
|
||||
if getattr(task_stage, parser, None) is not None:
|
||||
for _, keyword in enumerate(getattr(task_stage, parser).keyword):
|
||||
keyword_weight.append({"keyword": [keyword], "score": 0})
|
||||
for idx, weight in enumerate(getattr(task_stage, parser).weight):
|
||||
keyword_weight[idx]["score"] = weight
|
||||
if task_stage.parsers is not None:
|
||||
for parser in task_stage.parsers:
|
||||
if parser in keyword_parser:
|
||||
keyword_parser_ = next(
|
||||
p for p in conf_stage.parsers if p.name == parser
|
||||
)
|
||||
keyword_weight = []
|
||||
if getattr(task_stage, parser, None) is not None:
|
||||
for _, keyword in enumerate(getattr(task_stage, parser).keyword):
|
||||
keyword_weight.append({"keyword": [keyword], "score": 0})
|
||||
for idx, weight in enumerate(getattr(task_stage, parser).weight):
|
||||
keyword_weight[idx]["score"] = weight
|
||||
|
||||
keyword_parser_.with_.update({"match": keyword_weight})
|
||||
else:
|
||||
continue
|
||||
keyword_parser_.with_.update({"match": keyword_weight})
|
||||
else:
|
||||
continue
|
||||
return conf_stage
|
||||
|
||||
|
||||
def fix_result_detail(task_stage: TaskStage, conf_stage: ResultStage) -> ResultStage:
|
||||
if "result-detail" in task_stage.parsers:
|
||||
if (task_stage.parsers is not None) and ("result-detail" in task_stage.parsers):
|
||||
result_detail_parser = next(
|
||||
p for p in conf_stage.parsers if p.name == "result-detail"
|
||||
)
|
||||
|
@ -57,13 +62,21 @@ def fix_comment(task_stage: TaskStage, conf_stage: ResultStage) -> ResultStage:
|
|||
"result-status",
|
||||
"cpplint",
|
||||
] # FIXME: determine where cpplint should be
|
||||
for parser in task_stage.parsers:
|
||||
if parser in comment_parser:
|
||||
comment_parser_ = next(p for p in conf_stage.parsers if p.name == parser)
|
||||
if getattr(task_stage, parser.replace("-", "_"), None) is not None:
|
||||
comment_parser_.with_.update(
|
||||
getattr(task_stage, parser.replace("-", "_"))
|
||||
if task_stage.parsers is not None:
|
||||
for parser in task_stage.parsers:
|
||||
if parser in comment_parser:
|
||||
comment_parser_ = next(
|
||||
p for p in conf_stage.parsers if p.name == parser
|
||||
)
|
||||
else:
|
||||
continue
|
||||
if getattr(task_stage, parser.replace("-", "_"), None) is not None:
|
||||
comment_parser_.with_.update(
|
||||
getattr(task_stage, parser.replace("-", "_"))
|
||||
)
|
||||
else:
|
||||
continue
|
||||
return conf_stage
|
||||
|
||||
|
||||
def fix_diff(task_stage: TaskStage, conf_stage: ResultStage) -> ResultStage:
|
||||
|
||||
return conf_stage
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
from datetime import datetime
|
||||
from typing import Any, Dict, List, Optional, Type
|
||||
from typing import Any, Dict, Optional, Type, List
|
||||
|
||||
from pydantic import BaseModel, Field, root_validator
|
||||
from pydantic import BaseModel, Field, root_validator
|
||||
|
||||
|
||||
class ParserResultDetail(BaseModel):
|
||||
|
@ -21,6 +22,17 @@ class ParserKeyword(BaseModel):
|
|||
weight: Optional[list[int]] = []
|
||||
|
||||
|
||||
class Outputs(BaseModel):
|
||||
score: Optional[int] = 0
|
||||
ignorespaces: Optional[bool] = False
|
||||
hide: Optional[bool] = False
|
||||
forcequit: Optional[bool] = True
|
||||
|
||||
|
||||
class ParserDiff(BaseModel):
|
||||
output: Optional[Outputs] = Outputs()
|
||||
|
||||
|
||||
class Files(BaseModel):
|
||||
import_: Optional[List[str]] = Field(serialization_alias="import", validation_alias="import")
|
||||
export: Optional[List[str]]
|
||||
|
@ -35,11 +47,11 @@ class Limit(BaseModel):
|
|||
|
||||
|
||||
class Stage(BaseModel):
|
||||
name: str # Stage name
|
||||
command: str # Command to run
|
||||
name: Optional[str] = None # Stage name
|
||||
command: Optional[str] = None # Command to run
|
||||
files: Optional[Files] = None
|
||||
score: Optional[int] = 0
|
||||
parsers: list[str] # list of parsers
|
||||
parsers: Optional[list[str]] = [] # list of parsers
|
||||
limit: Optional[Limit] = None
|
||||
dummy: Optional[ParserDummy] = ParserDummy()
|
||||
result_status: Optional[ParserDummy] = Field(ParserDummy(), alias="result-status")
|
||||
|
@ -52,6 +64,20 @@ class Stage(BaseModel):
|
|||
result_detail: Optional[ParserResultDetail] = Field(
|
||||
ParserResultDetail(), alias="result-detail"
|
||||
)
|
||||
skip: Optional[list[str]] = []
|
||||
diff: Optional[ParserDiff] = ParserDiff()
|
||||
cases: Optional[Dict[str, "Stage"]] = {}
|
||||
|
||||
class Config:
|
||||
extra = "allow"
|
||||
|
||||
@root_validator(pre=True)
|
||||
def gather_cases(cls: Type["Stage"], values: Dict[str, Any]) -> Dict[str, Any]:
|
||||
cases = {k: v for k, v in values.items() if k.startswith("case")}
|
||||
for key in cases:
|
||||
values.pop(key)
|
||||
values["cases"] = {k: Stage(**v) for k, v in cases.items()}
|
||||
return values
|
||||
|
||||
|
||||
class Release(BaseModel):
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "Homework 1 exercise 2",
|
||||
"logPath": "Homework-1-exercise-2.log",
|
||||
"name": "h4 ex1",
|
||||
"logPath": "h4-ex1.log",
|
||||
"expireUnixTimestamp": 1728748740,
|
||||
"stage": {
|
||||
"sandboxExecServer": "172.17.0.1:5051",
|
||||
|
@ -18,7 +18,7 @@
|
|||
"/<function",
|
||||
"get_temp_directory",
|
||||
"at",
|
||||
"0x7fd3bed4f1a0>/repo-health-checker",
|
||||
"0x7f932c5e31a0>/repo-health-checker",
|
||||
"-root=.",
|
||||
"-repoSize=50.5",
|
||||
"-meta=main.py",
|
||||
|
@ -71,8 +71,8 @@
|
|||
"cpuRateLimit": 0,
|
||||
"cpuSetLimit": "",
|
||||
"copyIn": {
|
||||
"//tmp/repo-checker-9z61g608/repo-health-checker": {
|
||||
"src": "//tmp/repo-checker-19d98f6u/repo-health-checker",
|
||||
"//tmp/repo-checker-tw0902sa/repo-health-checker": {
|
||||
"src": "//tmp/repo-checker-4sy3g0ro/repo-health-checker",
|
||||
"content": null,
|
||||
"fileId": null,
|
||||
"name": null,
|
||||
|
@ -238,11 +238,6 @@
|
|||
{
|
||||
"name": "result-status",
|
||||
"with": {
|
||||
"time": false,
|
||||
"mem": false,
|
||||
"stdout": false,
|
||||
"stderr": true,
|
||||
"exitstatus": true,
|
||||
"score": 0,
|
||||
"comment": "",
|
||||
"showFiles": [
|
||||
|
@ -386,11 +381,6 @@
|
|||
{
|
||||
"name": "result-detail",
|
||||
"with": {
|
||||
"time": false,
|
||||
"mem": false,
|
||||
"stdout": false,
|
||||
"stderr": true,
|
||||
"exitstatus": false,
|
||||
"score": 0,
|
||||
"comment": "",
|
||||
"showFiles": [
|
||||
|
@ -578,11 +568,6 @@
|
|||
{
|
||||
"name": "result-detail",
|
||||
"with": {
|
||||
"time": false,
|
||||
"mem": false,
|
||||
"stdout": true,
|
||||
"stderr": false,
|
||||
"exitstatus": true,
|
||||
"score": 0,
|
||||
"comment": "",
|
||||
"showFiles": [
|
||||
|
@ -720,11 +705,6 @@
|
|||
{
|
||||
"name": "result-detail",
|
||||
"with": {
|
||||
"time": false,
|
||||
"mem": false,
|
||||
"stdout": false,
|
||||
"stderr": true,
|
||||
"exitstatus": true,
|
||||
"score": 0,
|
||||
"comment": "",
|
||||
"showFiles": [
|
||||
|
@ -827,11 +807,6 @@
|
|||
{
|
||||
"name": "result-detail",
|
||||
"with": {
|
||||
"time": false,
|
||||
"mem": false,
|
||||
"stdout": true,
|
||||
"stderr": false,
|
||||
"exitstatus": true,
|
||||
"score": 0,
|
||||
"comment": "",
|
||||
"showFiles": [
|
||||
|
@ -928,11 +903,6 @@
|
|||
{
|
||||
"name": "result-detail",
|
||||
"with": {
|
||||
"time": true,
|
||||
"mem": true,
|
||||
"stdout": false,
|
||||
"stderr": true,
|
||||
"exitstatus": true,
|
||||
"score": 0,
|
||||
"comment": "",
|
||||
"showFiles": [
|
||||
|
@ -1029,11 +999,6 @@
|
|||
{
|
||||
"name": "result-detail",
|
||||
"with": {
|
||||
"time": true,
|
||||
"mem": true,
|
||||
"stdout": false,
|
||||
"stderr": true,
|
||||
"exitstatus": true,
|
||||
"score": 0,
|
||||
"comment": "",
|
||||
"showFiles": [
|
||||
|
@ -1049,9 +1014,9 @@
|
|||
]
|
||||
},
|
||||
"teapot": {
|
||||
"logPath": "Homework-1-exercise-2-joint-teapot-debug.log",
|
||||
"scoreboardPath": "Homework-1-exercise-2-scoreboard.csv",
|
||||
"failedTablePath": "Homework-1-exercise-2-failed-table.md",
|
||||
"logPath": "h4-ex1-joint-teapot-debug.log",
|
||||
"scoreboardPath": "h4-ex1-scoreboard.csv",
|
||||
"failedTablePath": "h4-ex1-failed-table.md",
|
||||
"gradingRepoName": "engr151-joj",
|
||||
"skipIssue": false,
|
||||
"skipScoreboard": false,
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# general task configuration
|
||||
task="Homework 1 exercise 2" # task name
|
||||
task="h4 ex1" # task name
|
||||
|
||||
release.deadline = 2024-10-12 23:59:00+08:00
|
||||
release.stages = [ "compile" ]
|
||||
|
|
Loading…
Reference in New Issue
Block a user