feat: union type cmd files
All checks were successful
build / build (push) Successful in 2m32s

This commit is contained in:
张泊明518370910136 2025-02-28 08:13:08 -05:00
parent aee123601f
commit f5b7563869
GPG Key ID: D47306D7062CDA9D
3 changed files with 46 additions and 36 deletions

View File

@ -24,7 +24,8 @@ def convert(repo_conf: repo.Config, task_conf: task.Config) -> result.Config:
default=result.Cmd( default=result.Cmd(
args=task_stage.command.split(), args=task_stage.command.split(),
copy_in={ copy_in={
file: result.CmdFile(src=file) for file in task_stage.files.import_ file: result.LocalFile(src=file)
for file in task_stage.files.import_
}, },
copy_out_cached=task_stage.files.export, copy_out_cached=task_stage.files.export,
), ),

View File

@ -1,26 +1,47 @@
from typing import Any, Dict, List, Optional from typing import Any, Dict, List, Optional, Union
from pydantic import BaseModel, Field from pydantic import BaseModel, Field
class CmdFile(BaseModel): class LocalFile(BaseModel):
src: Optional[str] = None src: str
content: Optional[str] = None
file_id: Optional[str] = Field(None, serialization_alias="fileId")
name: Optional[str] = None class MemoryFile(BaseModel):
max: Optional[int] = None content: str
symlink: Optional[str] = None
stream_in: bool = Field(False, serialization_alias="streamIn")
stream_out: bool = Field(False, serialization_alias="streamOut") class PreparedFile(BaseModel):
pipe: bool = False file_id: str = Field(..., alias="fileId")
class Collector(BaseModel):
name: str
max: int
pipe: bool = True
class Symlink(BaseModel):
symlink: str
class StreamIn(BaseModel):
stream_in: bool = Field(..., alias="streamIn")
class StreamOut(BaseModel):
stream_out: bool = Field(..., alias="streamOut")
InputFile = Union[LocalFile | MemoryFile | PreparedFile | Symlink]
class Cmd(BaseModel): class Cmd(BaseModel):
args: List[str] args: List[str]
env: List[str] = [] env: List[str] = []
stdin: Optional[CmdFile] = None stdin: Optional[Union[InputFile | StreamIn]] = None
stdout: Optional[CmdFile] = None stdout: Optional[Union[Collector | StreamOut]] = None
stderr: Optional[CmdFile] = None stderr: Optional[Union[Collector | StreamOut]] = None
cpu_limit: int = Field(0, serialization_alias="cpuLimit") cpu_limit: int = Field(0, serialization_alias="cpuLimit")
real_cpu_limit: int = Field(0, serialization_alias="realCpuLimit") real_cpu_limit: int = Field(0, serialization_alias="realCpuLimit")
clock_limit: int = Field(0, serialization_alias="clockLimit") clock_limit: int = Field(0, serialization_alias="clockLimit")
@ -29,7 +50,7 @@ class Cmd(BaseModel):
proc_limit: int = Field(0, serialization_alias="procLimit") proc_limit: int = Field(0, serialization_alias="procLimit")
cpu_rate_limit: int = Field(0, serialization_alias="cpuRateLimit") cpu_rate_limit: int = Field(0, serialization_alias="cpuRateLimit")
cpu_set_limit: str = Field("", serialization_alias="cpuSetLimit") cpu_set_limit: str = Field("", serialization_alias="cpuSetLimit")
copy_in: Dict[str, CmdFile] = Field({}, serialization_alias="copyIn") copy_in: Dict[str, InputFile] = Field({}, serialization_alias="copyIn")
copy_in_cached: Dict[str, str] = Field({}, serialization_alias="copyInCached") copy_in_cached: Dict[str, str] = Field({}, serialization_alias="copyInCached")
copy_in_dir: str = Field(".", serialization_alias="copyInDir") copy_in_dir: str = Field(".", serialization_alias="copyInDir")
copy_out: List[str] = Field([], serialization_alias="copyOut") copy_out: List[str] = Field([], serialization_alias="copyOut")
@ -45,9 +66,9 @@ class Cmd(BaseModel):
class OptionalCmd(BaseModel): class OptionalCmd(BaseModel):
args: Optional[List[str]] = None args: Optional[List[str]] = None
env: Optional[List[str]] = None env: Optional[List[str]] = None
stdin: Optional[CmdFile] = None stdin: Optional[Union[InputFile | StreamIn]] = None
stdout: Optional[CmdFile] = None stdout: Optional[Union[Collector | StreamOut]] = None
stderr: Optional[CmdFile] = None stderr: Optional[Union[Collector | StreamOut]] = None
cpu_limit: Optional[int] = Field(None, serialization_alias="cpuLimit") cpu_limit: Optional[int] = Field(None, serialization_alias="cpuLimit")
real_cpu_limit: Optional[int] = Field(None, serialization_alias="realCpuLimit") real_cpu_limit: Optional[int] = Field(None, serialization_alias="realCpuLimit")
clock_limit: Optional[int] = Field(None, serialization_alias="clockLimit") clock_limit: Optional[int] = Field(None, serialization_alias="clockLimit")
@ -56,7 +77,7 @@ class OptionalCmd(BaseModel):
proc_limit: Optional[int] = Field(None, serialization_alias="procLimit") proc_limit: Optional[int] = Field(None, serialization_alias="procLimit")
cpu_rate_limit: Optional[int] = Field(None, serialization_alias="cpuRateLimit") cpu_rate_limit: Optional[int] = Field(None, serialization_alias="cpuRateLimit")
cpu_set_limit: Optional[str] = Field(None, serialization_alias="cpuSetLimit") cpu_set_limit: Optional[str] = Field(None, serialization_alias="cpuSetLimit")
copy_in: Optional[Dict[str, CmdFile]] = Field(None, serialization_alias="copyIn") copy_in: Optional[Dict[str, InputFile]] = Field(None, serialization_alias="copyIn")
copy_in_cached: Optional[Dict[str, str]] = Field( copy_in_cached: Optional[Dict[str, str]] = Field(
None, serialization_alias="copyInCached" None, serialization_alias="copyInCached"
) )

View File

@ -29,16 +29,10 @@
"cpuSetLimit": "", "cpuSetLimit": "",
"copyIn": { "copyIn": {
"tools/matlab-joj": { "tools/matlab-joj": {
"src": "tools/matlab-joj", "src": "tools/matlab-joj"
"streamIn": false,
"streamOut": false,
"pipe": false
}, },
"tools/matlab_formatter.py": { "tools/matlab_formatter.py": {
"src": "tools/matlab_formatter.py", "src": "tools/matlab_formatter.py"
"streamIn": false,
"streamOut": false,
"pipe": false
} }
}, },
"copyInCached": {}, "copyInCached": {},
@ -96,16 +90,10 @@
"cpuSetLimit": "", "cpuSetLimit": "",
"copyIn": { "copyIn": {
"tools/matlab-joj": { "tools/matlab-joj": {
"src": "tools/matlab-joj", "src": "tools/matlab-joj"
"streamIn": false,
"streamOut": false,
"pipe": false
}, },
"tools/matlab_formatter.py": { "tools/matlab_formatter.py": {
"src": "tools/matlab_formatter.py", "src": "tools/matlab_formatter.py"
"streamIn": false,
"streamOut": false,
"pipe": false
} }
}, },
"copyInCached": {}, "copyInCached": {},