Source code for job_execution.backends.registry

"""Registry for execution backend implementations."""

from simtools.job_execution.backends.base import BackendConfigurationError


def _local_factory():
    # Keep the local backend lazy so optional backends do not affect local use.
    # pylint: disable=import-outside-toplevel
    from simtools.job_execution.backends.local import (
        LocalBackend,
    )

    return LocalBackend()


def _htcondor_factory():
    # Keep htcondor2 lazy because it is an optional dependency.
    # pylint: disable=import-outside-toplevel
    from simtools.job_execution.backends.htcondor import (
        HTCondorBackend,
    )

    return HTCondorBackend()


_BACKENDS = {"local": _local_factory, "htcondor": _htcondor_factory}


[docs] def available_backends(): """Return registered backend names.""" return tuple(sorted(_BACKENDS))
[docs] def get_backend(name): """Instantiate a registered backend.""" try: return _BACKENDS[name]() except KeyError as exc: available = ", ".join(available_backends()) raise BackendConfigurationError( f"Unknown execution backend '{name}'. Available backends: {available}." ) from exc