Skip to content

Commit 082edb6

Browse files
committed
lang info types + updated frontend + typehints for langs except python in code editor
1 parent b21c402 commit 082edb6

File tree

13 files changed

+1051
-384
lines changed

13 files changed

+1051
-384
lines changed

backend/app/domain/execution/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,15 @@
77
from .models import (
88
DomainExecution,
99
ExecutionResultDomain,
10+
LanguageInfoDomain,
1011
ResourceLimitsDomain,
1112
ResourceUsageDomain,
1213
)
1314

1415
__all__ = [
1516
"DomainExecution",
1617
"ExecutionResultDomain",
18+
"LanguageInfoDomain",
1719
"ResourceLimitsDomain",
1820
"ResourceUsageDomain",
1921
"ExecutionServiceError",

backend/app/domain/execution/models.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,14 @@ def from_dict(data: dict[str, Any]) -> "ResourceUsageDomain":
6464
)
6565

6666

67+
@dataclass
68+
class LanguageInfoDomain:
69+
"""Language runtime information."""
70+
71+
versions: list[str]
72+
file_ext: str
73+
74+
6775
@dataclass
6876
class ResourceLimitsDomain:
6977
"""K8s resource limits configuration."""
@@ -73,4 +81,4 @@ class ResourceLimitsDomain:
7381
cpu_request: str
7482
memory_request: str
7583
execution_timeout: int
76-
supported_runtimes: dict[str, list[str]]
84+
supported_runtimes: dict[str, LanguageInfoDomain]

backend/app/runtime_registry.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
from typing import NamedTuple, TypedDict
22

3+
from app.domain.execution import LanguageInfoDomain
4+
35

46
class RuntimeConfig(NamedTuple):
57
image: str # Full Docker image reference
@@ -178,4 +180,7 @@ def _make_runtime_configs() -> dict[str, dict[str, RuntimeConfig]]:
178180

179181
RUNTIME_REGISTRY: dict[str, dict[str, RuntimeConfig]] = _make_runtime_configs()
180182

181-
SUPPORTED_RUNTIMES: dict[str, list[str]] = {lang: list(versions.keys()) for lang, versions in RUNTIME_REGISTRY.items()}
183+
SUPPORTED_RUNTIMES: dict[str, LanguageInfoDomain] = {
184+
lang: LanguageInfoDomain(versions=spec["versions"], file_ext=spec["file_ext"])
185+
for lang, spec in LANGUAGE_SPECS.items()
186+
}

backend/app/schemas_pydantic/execution.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,9 @@ def validate_runtime_supported(self) -> "ExecutionRequest": # noqa: D401
7777
runtimes = settings.SUPPORTED_RUNTIMES or {}
7878
if self.lang not in runtimes:
7979
raise ValueError(f"Language '{self.lang}' not supported. Supported: {list(runtimes.keys())}")
80-
versions = runtimes.get(self.lang, [])
81-
if self.lang_version not in versions:
82-
raise ValueError(f"Version '{self.lang_version}' not supported for {self.lang}. Supported: {versions}")
80+
lang_info = runtimes[self.lang]
81+
if self.lang_version not in lang_info.versions:
82+
raise ValueError(f"Version '{self.lang_version}' not supported for {self.lang}. Supported: {lang_info.versions}")
8383
return self
8484

8585

@@ -108,6 +108,13 @@ class ExecutionResult(BaseModel):
108108
model_config = ConfigDict(from_attributes=True)
109109

110110

111+
class LanguageInfo(BaseModel):
112+
"""Language runtime information."""
113+
114+
versions: list[str]
115+
file_ext: str
116+
117+
111118
class ResourceLimits(BaseModel):
112119
"""Model for resource limits configuration."""
113120

@@ -116,7 +123,7 @@ class ResourceLimits(BaseModel):
116123
cpu_request: str
117124
memory_request: str
118125
execution_timeout: int
119-
supported_runtimes: dict[str, list[str]]
126+
supported_runtimes: dict[str, LanguageInfo]
120127

121128

122129
class ExampleScripts(BaseModel):

backend/app/services/execution_service.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,12 @@
1010
from app.db.repositories.execution_repository import ExecutionRepository
1111
from app.domain.enums.events import EventType
1212
from app.domain.enums.execution import ExecutionStatus
13-
from app.domain.execution import DomainExecution, ExecutionResultDomain, ResourceLimitsDomain, ResourceUsageDomain
13+
from app.domain.execution import (
14+
DomainExecution,
15+
ExecutionResultDomain,
16+
ResourceLimitsDomain,
17+
ResourceUsageDomain,
18+
)
1419
from app.events.core import UnifiedProducer
1520
from app.events.event_store import EventStore
1621
from app.infrastructure.kafka.events.base import BaseEvent

backend/app/settings.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from pydantic import Field
44
from pydantic_settings import BaseSettings, SettingsConfigDict
55

6+
from app.domain.execution import LanguageInfoDomain
67
from app.runtime_registry import EXAMPLE_SCRIPTS as EXEC_EXAMPLE_SCRIPTS
78
from app.runtime_registry import SUPPORTED_RUNTIMES as RUNTIME_MATRIX
89

@@ -37,7 +38,7 @@ class Settings(BaseSettings):
3738
K8S_POD_EXECUTION_TIMEOUT: int = 300 # in seconds
3839
K8S_POD_PRIORITY_CLASS_NAME: str | None = None
3940

40-
SUPPORTED_RUNTIMES: dict[str, list[str]] = Field(default_factory=lambda: RUNTIME_MATRIX)
41+
SUPPORTED_RUNTIMES: dict[str, LanguageInfoDomain] = Field(default_factory=lambda: RUNTIME_MATRIX)
4142

4243
EXAMPLE_SCRIPTS: dict[str, str] = Field(default_factory=lambda: EXEC_EXAMPLE_SCRIPTS)
4344

0 commit comments

Comments
 (0)