Develop #41

Merged
tao.chen merged 96 commits from develop into main 2026-09-02 10:15:06 +08:00
3 changed files with 62 additions and 0 deletions
Showing only changes of commit 3118694e66 - Show all commits
+41
View File
@@ -0,0 +1,41 @@
"""Shared constants and timezone helpers for the scheduler components.
Designed to be import-side-effect-free: no logging, no I/O, no model imports.
Used by ``scheduler``, ``orchestrator`` and ``worker`` modules.
"""
from __future__ import annotations
from datetime import UTC, datetime
TERMINAL_NODE_STATES = frozenset({
"succeeded",
"failed",
"skipped",
"cancelled",
"timed_out",
})
FAILED_NODE_STATES = frozenset({"failed", "cancelled", "timed_out"})
TERMINAL_RUN_STATES = frozenset({
"succeeded",
"failed",
"cancelled",
"timed_out",
})
def naive_utc(value: datetime | None) -> datetime | None:
"""Normalize a datetime to naive UTC; pass through ``None``."""
if value is None:
return None
if value.tzinfo is None:
value = value.replace(tzinfo=UTC)
return value.astimezone(UTC).replace(tzinfo=None)
__all__ = [
"FAILED_NODE_STATES",
"TERMINAL_NODE_STATES",
"TERMINAL_RUN_STATES",
"naive_utc",
]
+21
View File
@@ -0,0 +1,21 @@
"""Domain types for schedule node execution.
Pure value objects — no I/O, no logging, no model imports. Safe to import
from any layer.
"""
from __future__ import annotations
from dataclasses import dataclass
@dataclass(frozen=True)
class ExecutionResult:
status: str
exit_code: int | None
logs: bytes
result: bytes
result_file_name: str
result_content_type: str
error_code: str | None = None
error_message: str | None = None