Source code for psij.job_executor_config

from pathlib import Path
from typing import Optional, Union


[docs]class JobExecutorConfig(object): """An abstract configuration class for :class:`~psij.JobExecutor` instances.""" #: A default `JobExecutorConfig` used when none is specified. DEFAULT: 'JobExecutorConfig' = None # type: ignore #: The default work directory when a work directory is not explicitly specified. DEFAULT_WORK_DIRECTORY = Path.home() / '.psij' / 'work' def __init__(self, launcher_log_file: Optional[Path] = None, work_directory: Optional[Path] = None) -> None: """ Parameters ---------- launcher_log_file If specified, log messages from launcher scripts (including output from pre- and post- launch scripts) will be directed to this file. work_directory A directory where submit scripts and auxiliary job files will be generated. In a, cluster this directory needs to point to a directory on a shared filesystem. This is so that the exit code file, likely written on a service node, can be accessed by PSI/J, likely running on a head node. """ self._launcher_log_file = launcher_log_file if work_directory: self._work_directory = work_directory else: self._work_directory = JobExecutorConfig.DEFAULT_WORK_DIRECTORY @property def launcher_log_file(self) -> Optional[Path]: """ Configure the executor's launcher log file. Parameters ---------- launcher_log_file If specified, log messages from launcher scripts (including output from pre- and post- launch scripts) will be directed to this file. """ return self._launcher_log_file @launcher_log_file.setter def launcher_log_file(self, value: Optional[Union[str, Path]]) -> None: if value: self._launcher_log_file = Path(value) @property def work_directory(self) -> Path: """ Configure the execor's work directory. Parameters ---------- work_directory A directory where submit scripts and auxiliary job files will be generated. In a, cluster this directory needs to point to a directory on a shared filesystem. This is so that the exit code file, likely written on a service node, can be accessed by PSI/J, likely running on a head node. """ return self._work_directory @work_directory.setter def work_directory(self, value: Union[str, Path]) -> None: self._work_directory = Path(value)
JobExecutorConfig.DEFAULT = JobExecutorConfig()