fix: remove Optional and fix its dependent code
All checks were successful
build / build (pull_request) Successful in 2m32s
build / build (push) Successful in 2m35s

This commit is contained in:
李衍志523370910113 2025-03-02 18:06:27 +08:00
parent 5c1eede217
commit 82fa325cf6
16 changed files with 81 additions and 70 deletions

View File

@ -1,4 +1,6 @@
import os import os
from datetime import datetime
from pathlib import Path
from typing import List from typing import List
from joj3_config_generator.models import joj1, repo, result, task 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 if task_conf.release.end_time
else -1 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 actor_csv_path="/home/tt/.config/joj/students.csv", # students.csv position
max_total_score=repo_conf.max_total_score, max_total_score=repo_conf.max_total_score,
stage=result.Stage( 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: def convert_joj1(joj1_conf: joj1.Config) -> task.Config:
stages = [get_joj1_run_stage(joj1_conf)] stages = [get_joj1_run_stage(joj1_conf)]
return task.Config( return task.Config(
root=Path(""),
path=Path(""),
task=task.Task( task=task.Task(
name=(""), name=(""),
), ),
release=task.Release(end_time=None, begin_time=None), release=task.Release(end_time=datetime.now(), begin_time=datetime.now()),
stages=stages, stages=stages,
) )

View File

@ -1,6 +1,6 @@
from datetime import datetime from datetime import datetime
from pathlib import Path 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 from pydantic import BaseModel, Field, field_validator, model_validator
@ -13,48 +13,48 @@ from joj3_config_generator.models.const import (
class ParserResultDetail(BaseModel): class ParserResultDetail(BaseModel):
time: Optional[bool] = True # Display run time time: bool = True # Display run time
mem: Optional[bool] = True # Display memory usage mem: bool = True # Display memory usage
stdout: Optional[bool] = False # Display stdout messages stdout: bool = False # Display stdout messages
stderr: Optional[bool] = False # Display stderr messages stderr: bool = False # Display stderr messages
exitstatus: Optional[bool] = False exitstatus: bool = False
class ParserFile(BaseModel): class ParserFile(BaseModel):
name: Optional[str] = None name: str = ""
class ParserLog(BaseModel): class ParserLog(BaseModel):
fileName: Optional[str] = None file_name: str = Field("", alias="fileName")
msg: Optional[str] = None msg: str = ""
level: Optional[str] = None level: str = ""
class ParserDummy(BaseModel): class ParserDummy(BaseModel):
comment: Optional[str] = "" comment: str = ""
score: Optional[int] = 0 score: int = 0
forcequit: Optional[bool] = False forcequit: bool = False
class ParserKeyword(BaseModel): class ParserKeyword(BaseModel):
keyword: Optional[List[str]] = [] keyword: List[str] = []
weight: Optional[List[int]] = [] weight: List[int] = []
class Outputs(BaseModel): class Outputs(BaseModel):
score: Optional[int] = 0 score: int = 0
ignorespaces: Optional[bool] = True ignorespaces: bool = True
hide: Optional[bool] = False hide: bool = False
forcequit: Optional[bool] = False forcequit: bool = False
class ParserDiff(BaseModel): class ParserDiff(BaseModel):
output: Optional[Outputs] = Outputs() output: Outputs = Outputs()
class Files(BaseModel): class Files(BaseModel):
import_: Optional[List[str]] = Field([], alias="import") import_: List[str] = Field([], alias="import")
export: Optional[List[str]] = [] export: List[str] = []
class Limit(BaseModel): class Limit(BaseModel):
@ -75,30 +75,30 @@ class Limit(BaseModel):
class Stage(BaseModel): class Stage(BaseModel):
name: Optional[str] = None # Stage name name: str = "" # Stage name
env: Optional[List[str]] = None env: List[str] = []
command: Optional[str] = None # Command to run command: str = "" # Command to run
files: Optional[Files] = None files: Files = Files()
in_: Optional[str] = Field(None, alias="in") in_: str = Field("", alias="in")
out_: Optional[str] = Field(None, alias="out") out_: str = Field("", alias="out")
score: Optional[int] = 0 score: int = 0
parsers: Optional[List[str]] = [] # list of parsers parsers: List[str] = [] # list of parsers
limit: Limit = Limit() limit: Limit = Limit()
dummy: Optional[ParserDummy] = ParserDummy() dummy: ParserDummy = ParserDummy()
result_status: Optional[ParserDummy] = Field(ParserDummy(), alias="result-status") result_status: ParserDummy = Field(ParserDummy(), alias="result-status")
keyword: Optional[ParserKeyword] = ParserKeyword() keyword: ParserKeyword = ParserKeyword()
clangtidy: Optional[ParserKeyword] = ParserKeyword() clangtidy: ParserKeyword = ParserKeyword()
cppcheck: Optional[ParserKeyword] = ParserKeyword() cppcheck: ParserKeyword = ParserKeyword()
cpplint: Optional[ParserKeyword] = ParserKeyword() cpplint: ParserKeyword = ParserKeyword()
result_detail: Optional[ParserResultDetail] = Field( result_detail: ParserResultDetail = Field(
ParserResultDetail(), alias="result-detail" ParserResultDetail(), alias="result-detail"
) )
file: Optional[ParserFile] = ParserFile() file: ParserFile = ParserFile()
skip: Optional[List[str]] = [] skip: List[str] = []
# cases related # cases related
cases: Optional[Dict[str, "Stage"]] = None cases: Dict[str, "Stage"] = {}
diff: Optional[ParserDiff] = ParserDiff() diff: ParserDiff = ParserDiff()
model_config = {"extra": "allow"} model_config = {"extra": "allow"}
@ -113,20 +113,18 @@ class Stage(BaseModel):
class Release(BaseModel): class Release(BaseModel):
end_time: Optional[datetime] = None # RFC 3339 formatted date-time with offset end_time: datetime = datetime.now() # RFC 3339 formatted date-time with offset
begin_time: Optional[datetime] = None begin_time: datetime = datetime.now() # RFC 3339 formatted date-time with offset
class Task(BaseModel): class Task(BaseModel):
type_: Optional[str] = Field( type_: str = Field("", serialization_alias="type", validation_alias="type")
"", serialization_alias="type", validation_alias="type"
)
name: str name: str
class Config(BaseModel): class Config(BaseModel):
root: Optional[Path] = None root: Path = Path(".")
path: Optional[Path] = None path: Path = Path("task.toml")
task: Task # Task name (e.g., hw3 ex5) task: Task # Task name (e.g., hw3 ex5)
release: Release # Release configuration release: Release # Release configuration
stages: List[Stage] # list of stage configurations stages: List[Stage] # list of stage configurations

View File

@ -9,7 +9,7 @@ def get_joj1_run_stage(joj1_config: joj1.Config) -> task.Stage:
cases_conf.append( cases_conf.append(
task.Stage( task.Stage(
score=case.score, 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( limit=task.Limit(
cpu=Time(case.time) if case.time else DEFAULT_CPU_LIMIT, cpu=Time(case.time) if case.time else DEFAULT_CPU_LIMIT,
mem=(Memory(case.memory) if case.memory else DEFAULT_MEMORY_LIMIT), mem=(Memory(case.memory) if case.memory else DEFAULT_MEMORY_LIMIT),

View File

@ -207,8 +207,8 @@ def fix_diff(
clock_limit = 2 * case_stage.limit.cpu clock_limit = 2 * case_stage.limit.cpu
memory_limit = case_stage.limit.mem memory_limit = case_stage.limit.mem
command = case_stage.command if case_stage.command is not None else None 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" stdin = case_stage.in_ if case_stage.in_ != "" else f"{case}.in"
stdout = case_stage.out_ if case_stage.out_ is not None else f"{case}.out" stdout = case_stage.out_ if case_stage.out_ != "" else f"{case}.out"
stage_cases.append( stage_cases.append(
result.OptionalCmd( result.OptionalCmd(

View File

@ -1,8 +1,8 @@
{ {
"name": "hw7 ex2", "name": "hw7 ex2",
"logPath": "/home/tt/.cache/joj3/homework/h7/e2.log", "logPath": "/home/tt/.cache/joj3/homework/h7/e2.log",
"expireUnixTimestamp": -1, "expireUnixTimestamp": 1735574399,
"effectiveUnixTimestamp": -1, "effectiveUnixTimestamp": 1735487999,
"actorCsvPath": "/home/tt/.config/joj/students.csv", "actorCsvPath": "/home/tt/.config/joj/students.csv",
"maxTotalScore": 100, "maxTotalScore": 100,
"stage": { "stage": {
@ -660,6 +660,7 @@
}, },
"cases": [ "cases": [
{ {
"args": [],
"stdin": { "stdin": {
"src": "/home/tt/.config/joj/homework/h7/e2/case0.in" "src": "/home/tt/.config/joj/homework/h7/e2/case0.in"
}, },
@ -669,6 +670,7 @@
"procLimit": 50 "procLimit": 50
}, },
{ {
"args": [],
"stdin": { "stdin": {
"src": "/home/tt/.config/joj/homework/h7/e2/case1.in" "src": "/home/tt/.config/joj/homework/h7/e2/case1.in"
}, },

View File

@ -2,7 +2,7 @@
task.name = "hw7 ex2" # task name task.name = "hw7 ex2" # task name
task.type = "homework/h7/e2" # remove this task type later 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 release.begin_time = 2024-12-29 23:59:59+08:00
[[stages]] [[stages]]

View File

@ -1,8 +1,8 @@
{ {
"name": "hw7 ex2", "name": "hw7 ex2",
"logPath": "/home/tt/.cache/joj3/homework/h7/e2.log", "logPath": "/home/tt/.cache/joj3/homework/h7/e2.log",
"expireUnixTimestamp": -1, "expireUnixTimestamp": 1735574399,
"effectiveUnixTimestamp": -1, "effectiveUnixTimestamp": 1735487999,
"actorCsvPath": "/home/tt/.config/joj/students.csv", "actorCsvPath": "/home/tt/.config/joj/students.csv",
"maxTotalScore": 100, "maxTotalScore": 100,
"stage": { "stage": {

View File

@ -2,7 +2,7 @@
task.name = "hw7 ex2" # task name task.name = "hw7 ex2" # task name
task.type = "homework/h7/e2" # remove this task type later 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 release.begin_time = 2024-12-29 23:59:59+08:00
[[stages]] [[stages]]

View File

@ -1,8 +1,8 @@
{ {
"name": "hw7 ex2", "name": "hw7 ex2",
"logPath": "/home/tt/.cache/joj3/homework/h7/e2.log", "logPath": "/home/tt/.cache/joj3/homework/h7/e2.log",
"expireUnixTimestamp": -1, "expireUnixTimestamp": 1735574399,
"effectiveUnixTimestamp": -1, "effectiveUnixTimestamp": 1735487999,
"actorCsvPath": "/home/tt/.config/joj/students.csv", "actorCsvPath": "/home/tt/.config/joj/students.csv",
"maxTotalScore": 100, "maxTotalScore": 100,
"stage": { "stage": {

View File

@ -2,7 +2,7 @@
task.name = "hw7 ex2" # task name task.name = "hw7 ex2" # task name
task.type = "homework/h7/e2" # remove this task type later 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 release.begin_time = 2024-12-29 23:59:59+08:00
[[stages]] [[stages]]

View File

@ -1,8 +1,8 @@
{ {
"name": "hw7 ex2", "name": "hw7 ex2",
"logPath": "/home/tt/.cache/joj3/homework/h7/e2.log", "logPath": "/home/tt/.cache/joj3/homework/h7/e2.log",
"expireUnixTimestamp": -1, "expireUnixTimestamp": 1735574399,
"effectiveUnixTimestamp": -1, "effectiveUnixTimestamp": 1735487999,
"actorCsvPath": "/home/tt/.config/joj/students.csv", "actorCsvPath": "/home/tt/.config/joj/students.csv",
"maxTotalScore": 100, "maxTotalScore": 100,
"stage": { "stage": {

View File

@ -2,7 +2,7 @@
task.name = "hw7 ex2" # task name task.name = "hw7 ex2" # task name
task.type = "homework/h7/e2" # remove this task type later 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 release.begin_time = 2024-12-29 23:59:59+08:00
[[stages]] [[stages]]

View File

@ -1,8 +1,8 @@
{ {
"name": "hw7 ex2", "name": "hw7 ex2",
"logPath": "/home/tt/.cache/joj3/homework/h7/e2.log", "logPath": "/home/tt/.cache/joj3/homework/h7/e2.log",
"expireUnixTimestamp": -1, "expireUnixTimestamp": 1735574399,
"effectiveUnixTimestamp": -1, "effectiveUnixTimestamp": 1735487999,
"actorCsvPath": "/home/tt/.config/joj/students.csv", "actorCsvPath": "/home/tt/.config/joj/students.csv",
"maxTotalScore": 100, "maxTotalScore": 100,
"stage": { "stage": {
@ -63,6 +63,7 @@
}, },
"cases": [ "cases": [
{ {
"args": [],
"stdin": { "stdin": {
"src": "/home/tt/.config/joj/homework/h7/e2/case0.in" "src": "/home/tt/.config/joj/homework/h7/e2/case0.in"
}, },
@ -72,6 +73,7 @@
"procLimit": 50 "procLimit": 50
}, },
{ {
"args": [],
"stdin": { "stdin": {
"src": "/home/tt/.config/joj/homework/h7/e2/case1.in" "src": "/home/tt/.config/joj/homework/h7/e2/case1.in"
}, },

View File

@ -2,7 +2,7 @@
task.name = "hw7 ex2" # task name task.name = "hw7 ex2" # task name
task.type = "homework/h7/e2" # remove this task type later 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 release.begin_time = 2024-12-29 23:59:59+08:00
[[stages]] [[stages]]

View File

@ -1,8 +1,8 @@
{ {
"name": "hw7 ex2", "name": "hw7 ex2",
"logPath": "/home/tt/.cache/joj3/homework/h7/e2.log", "logPath": "/home/tt/.cache/joj3/homework/h7/e2.log",
"expireUnixTimestamp": -1, "expireUnixTimestamp": 1735574399,
"effectiveUnixTimestamp": -1, "effectiveUnixTimestamp": 1735487999,
"actorCsvPath": "/home/tt/.config/joj/students.csv", "actorCsvPath": "/home/tt/.config/joj/students.csv",
"maxTotalScore": 100, "maxTotalScore": 100,
"stage": { "stage": {

View File

@ -2,7 +2,7 @@
task.name = "hw7 ex2" # task name task.name = "hw7 ex2" # task name
task.type = "homework/h7/e2" # remove this task type later 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 release.begin_time = 2024-12-29 23:59:59+08:00
[[stages]] [[stages]]