dev #10

Merged
李衍志523370910113 merged 238 commits from dev into master 2025-03-05 16:20:39 +08:00
5 changed files with 80 additions and 72 deletions
Showing only changes of commit 3adf645eda - Show all commits

View File

@ -2,7 +2,12 @@ from typing import List
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,
@ -67,7 +72,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

View File

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

View File

@ -1,7 +1,7 @@
from datetime import datetime
jon-lee marked this conversation as resolved Outdated

every field in this file should not be optional. we give an default value here if any field does not exist

every field in this file should not be optional. we give an default value here if any field does not exist

and use underscore naming in this file

and use underscore naming in this file

every field in this file should not be optional. we give an default value here if any field does not exist

fixed

> every field in this file should not be optional. we give an default value here if any field does not exist fixed

and use underscore naming in this file

fixed.

> and use underscore naming in this file fixed.
from typing import List, Optional
from typing import Any, Dict, Optional, Type, List
from pydantic import BaseModel, Field
from pydantic import BaseModel, Field, root_validator
class ParserResultDetail(BaseModel):
@ -21,6 +21,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 +46,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 +63,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):

View File

@ -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,
@ -234,11 +234,6 @@
{
"name": "result-detail",
"with": {
"time": false,
"mem": false,
"stdout": false,
"stderr": true,
"exitstatus": true,
"score": 0,
"comment": "",
"showFiles": [
@ -379,11 +374,6 @@
{
"name": "result-detail",
"with": {
"time": false,
"mem": false,
"stdout": false,
"stderr": true,
"exitstatus": false,
"score": 0,
"comment": "",
"showFiles": [
@ -571,11 +561,6 @@
{
"name": "result-detail",
"with": {
"time": false,
"mem": false,
"stdout": true,
"stderr": false,
"exitstatus": true,
"score": 0,
"comment": "",
"showFiles": [
@ -713,11 +698,6 @@
{
"name": "result-detail",
"with": {
"time": false,
"mem": false,
"stdout": false,
"stderr": true,
"exitstatus": true,
"score": 0,
"comment": "",
"showFiles": [
@ -820,11 +800,6 @@
{
"name": "result-detail",
"with": {
"time": false,
"mem": false,
"stdout": true,
"stderr": false,
"exitstatus": true,
"score": 0,
"comment": "",
"showFiles": [
@ -921,11 +896,6 @@
{
"name": "result-detail",
"with": {
"time": true,
"mem": true,
"stdout": false,
"stderr": true,
"exitstatus": true,
"score": 0,
"comment": "",
"showFiles": [
@ -1022,11 +992,6 @@
{
"name": "result-detail",
"with": {
"time": true,
"mem": true,
"stdout": false,
"stderr": true,
"exitstatus": true,
"score": 0,
"comment": "",
"showFiles": [
@ -1042,9 +1007,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,

View File

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