Source code for job_execution.backends.base

"""Protocol and exceptions shared by execution backends."""

from typing import Protocol

from simtools.job_execution.job import ExecutionOptions, JobResult, JobSpec, SubmissionHandle


[docs] class BackendError(RuntimeError): """Base class for backend failures."""
[docs] class BackendConfigurationError(BackendError): """Raised when backend configuration is invalid or unavailable."""
[docs] class BackendSubmissionError(BackendError): """Raised when a backend cannot submit a job set."""
[docs] class BackendExecutionError(BackendError): """Raised when one or more submitted jobs fail."""
[docs] class ExecutionBackend(Protocol): """Protocol implemented by all job-execution backends."""
[docs] def submit(self, job_specs: list[JobSpec], options: ExecutionOptions) -> SubmissionHandle: """Submit jobs and return a handle."""
[docs] def wait(self, submission: SubmissionHandle) -> list[JobResult]: """Wait for completion and return ordered results."""
[docs] def is_finished(self, submission: SubmissionHandle) -> bool: """Return whether a submission has completed."""
[docs] def collect(self, submission: SubmissionHandle) -> list[JobResult]: """Collect results after a submission has finished."""
[docs] def cancel(self, submission: SubmissionHandle) -> None: """Cancel an active submission."""