Source code for srunx.containers.base

"""Base abstractions for container runtime backends."""

from __future__ import annotations

from dataclasses import dataclass
from typing import TYPE_CHECKING, Protocol

if TYPE_CHECKING:
    from srunx.models import ContainerResource


[docs] @dataclass(frozen=True) class LaunchSpec: """Runtime-agnostic container launch specification. Three distinct outputs model different injection points in generated scripts: - prelude: Shell setup lines executed before the command (e.g., declare arrays) - srun_args: Flags passed to srun itself (Pyxis uses this) - launch_prefix: Command wrapper prepended to the user command (Apptainer uses this) """ prelude: str = "" srun_args: str = "" launch_prefix: str = ""
[docs] class ContainerRuntime(Protocol): """Protocol for container runtime backends."""
[docs] def build_launch_spec(self, config: ContainerResource) -> LaunchSpec: ...