diff --git a/joj3_config_generator/convert.py b/joj3_config_generator/convert.py index 08072a8..c9dd28a 100644 --- a/joj3_config_generator/convert.py +++ b/joj3_config_generator/convert.py @@ -1,4 +1,6 @@ import os +from datetime import datetime +from pathlib import Path from typing import List from joj3_config_generator.models import joj1, repo, result, task @@ -29,6 +31,11 @@ def convert(repo_conf: repo.Config, task_conf: task.Config) -> result.Config: if task_conf.release.end_time else -1 ), + effective_unix_timestamp=( + int(task_conf.release.begin_time.timestamp()) + if task_conf.release.begin_time + else -1 + ), actor_csv_path="/home/tt/.config/joj/students.csv", # students.csv position max_total_score=repo_conf.max_total_score, stage=result.Stage( @@ -62,9 +69,11 @@ def convert(repo_conf: repo.Config, task_conf: task.Config) -> result.Config: def convert_joj1(joj1_conf: joj1.Config) -> task.Config: stages = [get_joj1_run_stage(joj1_conf)] return task.Config( + root=Path(""), + path=Path(""), task=task.Task( name=(""), ), - release=task.Release(end_time=None, begin_time=None), + release=task.Release(end_time=datetime.now(), begin_time=datetime.now()), stages=stages, ) diff --git a/joj3_config_generator/models/task.py b/joj3_config_generator/models/task.py index b8d9810..c5dd1d9 100644 --- a/joj3_config_generator/models/task.py +++ b/joj3_config_generator/models/task.py @@ -1,6 +1,6 @@ from datetime import datetime from pathlib import Path -from typing import Any, Dict, List, Optional, Type +from typing import Any, Dict, List, Type from pydantic import BaseModel, Field, field_validator, model_validator @@ -13,48 +13,48 @@ from joj3_config_generator.models.const import ( class ParserResultDetail(BaseModel): - time: Optional[bool] = True # Display run time - mem: Optional[bool] = True # Display memory usage - stdout: Optional[bool] = False # Display stdout messages - stderr: Optional[bool] = False # Display stderr messages - exitstatus: Optional[bool] = False + time: bool = True # Display run time + mem: bool = True # Display memory usage + stdout: bool = False # Display stdout messages + stderr: bool = False # Display stderr messages + exitstatus: bool = False class ParserFile(BaseModel): - name: Optional[str] = None + name: str = "" class ParserLog(BaseModel): - fileName: Optional[str] = None - msg: Optional[str] = None - level: Optional[str] = None + file_name: str = Field("", alias="fileName") + msg: str = "" + level: str = "" class ParserDummy(BaseModel): - comment: Optional[str] = "" - score: Optional[int] = 0 - forcequit: Optional[bool] = False + comment: str = "" + score: int = 0 + forcequit: bool = False class ParserKeyword(BaseModel): - keyword: Optional[List[str]] = [] - weight: Optional[List[int]] = [] + keyword: List[str] = [] + weight: List[int] = [] class Outputs(BaseModel): - score: Optional[int] = 0 - ignorespaces: Optional[bool] = True - hide: Optional[bool] = False - forcequit: Optional[bool] = False + score: int = 0 + ignorespaces: bool = True + hide: bool = False + forcequit: bool = False class ParserDiff(BaseModel): - output: Optional[Outputs] = Outputs() + output: Outputs = Outputs() class Files(BaseModel): - import_: Optional[List[str]] = Field([], alias="import") - export: Optional[List[str]] = [] + import_: List[str] = Field([], alias="import") + export: List[str] = [] class Limit(BaseModel): @@ -75,30 +75,30 @@ class Limit(BaseModel): class Stage(BaseModel): - name: Optional[str] = None # Stage name - env: Optional[List[str]] = None - command: Optional[str] = None # Command to run - files: Optional[Files] = None - in_: Optional[str] = Field(None, alias="in") - out_: Optional[str] = Field(None, alias="out") - score: Optional[int] = 0 - parsers: Optional[List[str]] = [] # list of parsers + name: str = "" # Stage name + env: List[str] = [] + command: str = "" # Command to run + files: Files = Files() + in_: str = Field("", alias="in") + out_: str = Field("", alias="out") + score: int = 0 + parsers: List[str] = [] # list of parsers limit: Limit = Limit() - dummy: Optional[ParserDummy] = ParserDummy() - result_status: Optional[ParserDummy] = Field(ParserDummy(), alias="result-status") - keyword: Optional[ParserKeyword] = ParserKeyword() - clangtidy: Optional[ParserKeyword] = ParserKeyword() - cppcheck: Optional[ParserKeyword] = ParserKeyword() - cpplint: Optional[ParserKeyword] = ParserKeyword() - result_detail: Optional[ParserResultDetail] = Field( + dummy: ParserDummy = ParserDummy() + result_status: ParserDummy = Field(ParserDummy(), alias="result-status") + keyword: ParserKeyword = ParserKeyword() + clangtidy: ParserKeyword = ParserKeyword() + cppcheck: ParserKeyword = ParserKeyword() + cpplint: ParserKeyword = ParserKeyword() + result_detail: ParserResultDetail = Field( ParserResultDetail(), alias="result-detail" ) - file: Optional[ParserFile] = ParserFile() - skip: Optional[List[str]] = [] + file: ParserFile = ParserFile() + skip: List[str] = [] # cases related - cases: Optional[Dict[str, "Stage"]] = None - diff: Optional[ParserDiff] = ParserDiff() + cases: Dict[str, "Stage"] = {} + diff: ParserDiff = ParserDiff() model_config = {"extra": "allow"} @@ -113,20 +113,18 @@ class Stage(BaseModel): class Release(BaseModel): - end_time: Optional[datetime] = None # RFC 3339 formatted date-time with offset - begin_time: Optional[datetime] = None + end_time: datetime = datetime.now() # RFC 3339 formatted date-time with offset + begin_time: datetime = datetime.now() # RFC 3339 formatted date-time with offset class Task(BaseModel): - type_: Optional[str] = Field( - "", serialization_alias="type", validation_alias="type" - ) + type_: str = Field("", serialization_alias="type", validation_alias="type") name: str class Config(BaseModel): - root: Optional[Path] = None - path: Optional[Path] = None + root: Path = Path(".") + path: Path = Path("task.toml") task: Task # Task name (e.g., hw3 ex5) release: Release # Release configuration stages: List[Stage] # list of stage configurations diff --git a/joj3_config_generator/processers/joj1.py b/joj3_config_generator/processers/joj1.py index 5c21549..5eeffc3 100644 --- a/joj3_config_generator/processers/joj1.py +++ b/joj3_config_generator/processers/joj1.py @@ -9,7 +9,7 @@ def get_joj1_run_stage(joj1_config: joj1.Config) -> task.Stage: cases_conf.append( task.Stage( score=case.score, - command=case.execute_args if case.execute_args else None, + command=case.execute_args if case.execute_args else "", limit=task.Limit( cpu=Time(case.time) if case.time else DEFAULT_CPU_LIMIT, mem=(Memory(case.memory) if case.memory else DEFAULT_MEMORY_LIMIT), diff --git a/joj3_config_generator/processers/task.py b/joj3_config_generator/processers/task.py index c02b261..2c8567b 100644 --- a/joj3_config_generator/processers/task.py +++ b/joj3_config_generator/processers/task.py @@ -207,8 +207,8 @@ def fix_diff( clock_limit = 2 * case_stage.limit.cpu memory_limit = case_stage.limit.mem command = case_stage.command if case_stage.command is not None else None - stdin = case_stage.in_ if case_stage.in_ is not None else f"{case}.in" - stdout = case_stage.out_ if case_stage.out_ is not None else f"{case}.out" + stdin = case_stage.in_ if case_stage.in_ != "" else f"{case}.in" + stdout = case_stage.out_ if case_stage.out_ != "" else f"{case}.out" stage_cases.append( result.OptionalCmd( diff --git a/tests/convert/basic/task.json b/tests/convert/basic/task.json index 8adf8e1..5fdb6e1 100644 --- a/tests/convert/basic/task.json +++ b/tests/convert/basic/task.json @@ -1,8 +1,8 @@ { "name": "hw7 ex2", "logPath": "/home/tt/.cache/joj3/homework/h7/e2.log", - "expireUnixTimestamp": -1, - "effectiveUnixTimestamp": -1, + "expireUnixTimestamp": 1735574399, + "effectiveUnixTimestamp": 1735487999, "actorCsvPath": "/home/tt/.config/joj/students.csv", "maxTotalScore": 100, "stage": { @@ -660,6 +660,7 @@ }, "cases": [ { + "args": [], "stdin": { "src": "/home/tt/.config/joj/homework/h7/e2/case0.in" }, @@ -669,6 +670,7 @@ "procLimit": 50 }, { + "args": [], "stdin": { "src": "/home/tt/.config/joj/homework/h7/e2/case1.in" }, diff --git a/tests/convert/basic/task.toml b/tests/convert/basic/task.toml index 60d0afa..6c6bf48 100644 --- a/tests/convert/basic/task.toml +++ b/tests/convert/basic/task.toml @@ -2,7 +2,7 @@ task.name = "hw7 ex2" # task name task.type = "homework/h7/e2" # remove this task type later -release.deadline = 2024-12-30 23:59:59+08:00 +release.end_time = 2024-12-30 23:59:59+08:00 release.begin_time = 2024-12-29 23:59:59+08:00 [[stages]] diff --git a/tests/convert/clang-tidy/task.json b/tests/convert/clang-tidy/task.json index 71b22f4..84d7f72 100644 --- a/tests/convert/clang-tidy/task.json +++ b/tests/convert/clang-tidy/task.json @@ -1,8 +1,8 @@ { "name": "hw7 ex2", "logPath": "/home/tt/.cache/joj3/homework/h7/e2.log", - "expireUnixTimestamp": -1, - "effectiveUnixTimestamp": -1, + "expireUnixTimestamp": 1735574399, + "effectiveUnixTimestamp": 1735487999, "actorCsvPath": "/home/tt/.config/joj/students.csv", "maxTotalScore": 100, "stage": { diff --git a/tests/convert/clang-tidy/task.toml b/tests/convert/clang-tidy/task.toml index 9371465..3985ed9 100644 --- a/tests/convert/clang-tidy/task.toml +++ b/tests/convert/clang-tidy/task.toml @@ -2,7 +2,7 @@ task.name = "hw7 ex2" # task name task.type = "homework/h7/e2" # remove this task type later -release.deadline = 2024-12-30 23:59:59+08:00 +release.end_time = 2024-12-30 23:59:59+08:00 release.begin_time = 2024-12-29 23:59:59+08:00 [[stages]] diff --git a/tests/convert/cppcheck/task.json b/tests/convert/cppcheck/task.json index 9a08ae9..0171aac 100644 --- a/tests/convert/cppcheck/task.json +++ b/tests/convert/cppcheck/task.json @@ -1,8 +1,8 @@ { "name": "hw7 ex2", "logPath": "/home/tt/.cache/joj3/homework/h7/e2.log", - "expireUnixTimestamp": -1, - "effectiveUnixTimestamp": -1, + "expireUnixTimestamp": 1735574399, + "effectiveUnixTimestamp": 1735487999, "actorCsvPath": "/home/tt/.config/joj/students.csv", "maxTotalScore": 100, "stage": { diff --git a/tests/convert/cppcheck/task.toml b/tests/convert/cppcheck/task.toml index 9113d79..5d1f74b 100644 --- a/tests/convert/cppcheck/task.toml +++ b/tests/convert/cppcheck/task.toml @@ -2,7 +2,7 @@ task.name = "hw7 ex2" # task name task.type = "homework/h7/e2" # remove this task type later -release.deadline = 2024-12-30 23:59:59+08:00 +release.end_time = 2024-12-30 23:59:59+08:00 release.begin_time = 2024-12-29 23:59:59+08:00 [[stages]] diff --git a/tests/convert/cpplint/task.json b/tests/convert/cpplint/task.json index 51139c0..75c5a92 100644 --- a/tests/convert/cpplint/task.json +++ b/tests/convert/cpplint/task.json @@ -1,8 +1,8 @@ { "name": "hw7 ex2", "logPath": "/home/tt/.cache/joj3/homework/h7/e2.log", - "expireUnixTimestamp": -1, - "effectiveUnixTimestamp": -1, + "expireUnixTimestamp": 1735574399, + "effectiveUnixTimestamp": 1735487999, "actorCsvPath": "/home/tt/.config/joj/students.csv", "maxTotalScore": 100, "stage": { diff --git a/tests/convert/cpplint/task.toml b/tests/convert/cpplint/task.toml index 0f0cca5..2e04eb5 100644 --- a/tests/convert/cpplint/task.toml +++ b/tests/convert/cpplint/task.toml @@ -2,7 +2,7 @@ task.name = "hw7 ex2" # task name task.type = "homework/h7/e2" # remove this task type later -release.deadline = 2024-12-30 23:59:59+08:00 +release.end_time = 2024-12-30 23:59:59+08:00 release.begin_time = 2024-12-29 23:59:59+08:00 [[stages]] diff --git a/tests/convert/diff/task.json b/tests/convert/diff/task.json index a807cdf..2c8b925 100644 --- a/tests/convert/diff/task.json +++ b/tests/convert/diff/task.json @@ -1,8 +1,8 @@ { "name": "hw7 ex2", "logPath": "/home/tt/.cache/joj3/homework/h7/e2.log", - "expireUnixTimestamp": -1, - "effectiveUnixTimestamp": -1, + "expireUnixTimestamp": 1735574399, + "effectiveUnixTimestamp": 1735487999, "actorCsvPath": "/home/tt/.config/joj/students.csv", "maxTotalScore": 100, "stage": { @@ -63,6 +63,7 @@ }, "cases": [ { + "args": [], "stdin": { "src": "/home/tt/.config/joj/homework/h7/e2/case0.in" }, @@ -72,6 +73,7 @@ "procLimit": 50 }, { + "args": [], "stdin": { "src": "/home/tt/.config/joj/homework/h7/e2/case1.in" }, diff --git a/tests/convert/diff/task.toml b/tests/convert/diff/task.toml index cd22e2e..a81f363 100644 --- a/tests/convert/diff/task.toml +++ b/tests/convert/diff/task.toml @@ -2,7 +2,7 @@ task.name = "hw7 ex2" # task name task.type = "homework/h7/e2" # remove this task type later -release.deadline = 2024-12-30 23:59:59+08:00 +release.end_time = 2024-12-30 23:59:59+08:00 release.begin_time = 2024-12-29 23:59:59+08:00 [[stages]] diff --git a/tests/convert/keyword/task.json b/tests/convert/keyword/task.json index 6c5725e..dfbd28e 100644 --- a/tests/convert/keyword/task.json +++ b/tests/convert/keyword/task.json @@ -1,8 +1,8 @@ { "name": "hw7 ex2", "logPath": "/home/tt/.cache/joj3/homework/h7/e2.log", - "expireUnixTimestamp": -1, - "effectiveUnixTimestamp": -1, + "expireUnixTimestamp": 1735574399, + "effectiveUnixTimestamp": 1735487999, "actorCsvPath": "/home/tt/.config/joj/students.csv", "maxTotalScore": 100, "stage": { diff --git a/tests/convert/keyword/task.toml b/tests/convert/keyword/task.toml index d0e810a..12302b1 100644 --- a/tests/convert/keyword/task.toml +++ b/tests/convert/keyword/task.toml @@ -2,7 +2,7 @@ task.name = "hw7 ex2" # task name task.type = "homework/h7/e2" # remove this task type later -release.deadline = 2024-12-30 23:59:59+08:00 +release.end_time = 2024-12-30 23:59:59+08:00 release.begin_time = 2024-12-29 23:59:59+08:00 [[stages]]