Loading pygriffin/config.py +36 −2 Original line number Diff line number Diff line Loading @@ -25,9 +25,18 @@ class PyGriffinConfig: """ __MOD_PATH = Path(__file__).parent.absolute() if Path(os.path.expanduser('~/.pygriffin.rc')).exists(): _RC_FILE = Path(os.path.expanduser('~')) / '.pygriffin.rc' elif Path(__MOD_PATH.parent / '.pygriffin.rc').exists(): _RC_FILE = __MOD_PATH.parent / '.pygriffin.rc' else: raise RuntimeError('PyGriffin config file (.pygriffin.rc) could not be found.') def __init__(self, griffin_exec=None, isoxml_exec=None): def __init__(self, griffin_exec=None, isoxml_exec=None, mpi_exec=None): # always read the config file, # even if we don't use it Loading Loading @@ -73,6 +82,18 @@ class PyGriffinConfig: self.detect_mpi() # check for a user-defined MPI executable path # in the config file if self.mpi_enabled: user_mpi_exec = self.get_path('exec', 'mpi') if user_mpi_exec is not None: self.mpi_exec = user_mpi_exec elif mpi_exec is not None: self.mpi_exec = mpi_exec else: self._mpi_exec = 'mpirun' def get(self, *args, **kwargs): """ Attempts to get a configuration option from the .rc file. Loading @@ -90,6 +111,9 @@ class PyGriffinConfig: Relative paths are assumed to be relative to the configuration file. """ val = self.get(*args, **kwargs) if val is None: return val # determine path path = Path(val) if not path.is_absolute(): path = self._RC_FILE.parent / path Loading Loading @@ -137,6 +161,16 @@ class PyGriffinConfig: cv.check_type('MPI enabled', val, bool) self._mpi_enabled = val @property def mpi_exec(self): return self._mpi_exec @mpi_exec.setter def mpi_exec(self, val): self._mpi_exec = cv.check_file('MPI executable', val, must_exist=True) @griffin_exec.setter def griffin_exec(self, val): self._griffin_exec = cv.check_file('Griffin executable path', Loading pygriffin/pygriffin.py +1 −1 Original line number Diff line number Diff line Loading @@ -57,7 +57,7 @@ class PyGriffin: if self.n_procs > 1: if self.config.mpi_enabled: cmd += ['mpirun', '-n', str(self.n_procs)] cmd += [self.mpi_exec, '-n', str(self.n_procs)] else: msg = ("MPI is not enabled for this Griffin executable. " "The n_procs argument will be ignored.") Loading tests/.pygriffin.test.rc +2 −1 Original line number Diff line number Diff line [exec] griffin = griffin_mock isoxml = isoxml_mock mpi = mpi_mock No newline at end of file tests/mpi_mock 0 → 100644 +0 −0 Empty file added. tests/test_config.py +15 −9 Original line number Diff line number Diff line Loading @@ -5,9 +5,11 @@ from pathlib import Path from pygriffin import PyGriffinConfig _CWD = Path(__file__).parent.absolute() _GRIFFIN_MOCK_PATH = _CWD / 'griffin_mock' _ISOXML_MOCK_PATH = _CWD / 'isoxml_mock' _TEST_DIR = Path(__file__).parent.absolute() _GRIFFIN_MOCK_PATH = _TEST_DIR / 'griffin_mock' _ISOXML_MOCK_PATH = _TEST_DIR / 'isoxml_mock' _MPI_MOCK_PATH = _TEST_DIR / 'mpi_mock' def test_griffin_config_fail(): # expect failure because no configuration is provided Loading @@ -20,6 +22,8 @@ def test_griffin_config_fail(): del os.environ['ISOXML_EXEC'] config = PyGriffinConfig() # quick check for default MPI exec value assert config.mpi_exec == 'mpirun' # expect failure because the griffin executable isn't a valid file with pytest.raises(ValueError) as e_info: Loading @@ -30,18 +34,21 @@ def test_griffin_config_fail(): def test_griffin_exec_direct(): config = PyGriffinConfig(griffin_exec=_GRIFFIN_MOCK_PATH, isoxml_exec=_ISOXML_MOCK_PATH) isoxml_exec=_ISOXML_MOCK_PATH, mpi_exec=_MPI_MOCK_PATH) assert config.griffin_exec == _GRIFFIN_MOCK_PATH assert config.isoxml_exec == _ISOXML_MOCK_PATH assert config.griffin_dir == _CWD assert config.mpi_exec == _MPI_MOCK_PATH assert config.griffin_dir == _TEST_DIR def test_griffin_exec_config(): PyGriffinConfig._RC_FILE = _CWD / '.pygriffin.test.rc' PyGriffinConfig._RC_FILE = _TEST_DIR / '.pygriffin.test.rc' config = PyGriffinConfig() assert config.griffin_exec == _GRIFFIN_MOCK_PATH assert config.isoxml_exec == _ISOXML_MOCK_PATH assert config.griffin_dir == _CWD assert config.mpi_exec == _MPI_MOCK_PATH assert config.griffin_dir == _TEST_DIR def test_griffin_env_config(): Loading @@ -50,8 +57,7 @@ def test_griffin_env_config(): config = PyGriffinConfig() assert config.griffin_exec == _GRIFFIN_MOCK_PATH assert config.isoxml_exec == _ISOXML_MOCK_PATH assert config.griffin_dir == _CWD assert config.griffin_dir == _TEST_DIR if __name__ == "__main__": pytest.main() Loading
pygriffin/config.py +36 −2 Original line number Diff line number Diff line Loading @@ -25,9 +25,18 @@ class PyGriffinConfig: """ __MOD_PATH = Path(__file__).parent.absolute() if Path(os.path.expanduser('~/.pygriffin.rc')).exists(): _RC_FILE = Path(os.path.expanduser('~')) / '.pygriffin.rc' elif Path(__MOD_PATH.parent / '.pygriffin.rc').exists(): _RC_FILE = __MOD_PATH.parent / '.pygriffin.rc' else: raise RuntimeError('PyGriffin config file (.pygriffin.rc) could not be found.') def __init__(self, griffin_exec=None, isoxml_exec=None): def __init__(self, griffin_exec=None, isoxml_exec=None, mpi_exec=None): # always read the config file, # even if we don't use it Loading Loading @@ -73,6 +82,18 @@ class PyGriffinConfig: self.detect_mpi() # check for a user-defined MPI executable path # in the config file if self.mpi_enabled: user_mpi_exec = self.get_path('exec', 'mpi') if user_mpi_exec is not None: self.mpi_exec = user_mpi_exec elif mpi_exec is not None: self.mpi_exec = mpi_exec else: self._mpi_exec = 'mpirun' def get(self, *args, **kwargs): """ Attempts to get a configuration option from the .rc file. Loading @@ -90,6 +111,9 @@ class PyGriffinConfig: Relative paths are assumed to be relative to the configuration file. """ val = self.get(*args, **kwargs) if val is None: return val # determine path path = Path(val) if not path.is_absolute(): path = self._RC_FILE.parent / path Loading Loading @@ -137,6 +161,16 @@ class PyGriffinConfig: cv.check_type('MPI enabled', val, bool) self._mpi_enabled = val @property def mpi_exec(self): return self._mpi_exec @mpi_exec.setter def mpi_exec(self, val): self._mpi_exec = cv.check_file('MPI executable', val, must_exist=True) @griffin_exec.setter def griffin_exec(self, val): self._griffin_exec = cv.check_file('Griffin executable path', Loading
pygriffin/pygriffin.py +1 −1 Original line number Diff line number Diff line Loading @@ -57,7 +57,7 @@ class PyGriffin: if self.n_procs > 1: if self.config.mpi_enabled: cmd += ['mpirun', '-n', str(self.n_procs)] cmd += [self.mpi_exec, '-n', str(self.n_procs)] else: msg = ("MPI is not enabled for this Griffin executable. " "The n_procs argument will be ignored.") Loading
tests/.pygriffin.test.rc +2 −1 Original line number Diff line number Diff line [exec] griffin = griffin_mock isoxml = isoxml_mock mpi = mpi_mock No newline at end of file
tests/test_config.py +15 −9 Original line number Diff line number Diff line Loading @@ -5,9 +5,11 @@ from pathlib import Path from pygriffin import PyGriffinConfig _CWD = Path(__file__).parent.absolute() _GRIFFIN_MOCK_PATH = _CWD / 'griffin_mock' _ISOXML_MOCK_PATH = _CWD / 'isoxml_mock' _TEST_DIR = Path(__file__).parent.absolute() _GRIFFIN_MOCK_PATH = _TEST_DIR / 'griffin_mock' _ISOXML_MOCK_PATH = _TEST_DIR / 'isoxml_mock' _MPI_MOCK_PATH = _TEST_DIR / 'mpi_mock' def test_griffin_config_fail(): # expect failure because no configuration is provided Loading @@ -20,6 +22,8 @@ def test_griffin_config_fail(): del os.environ['ISOXML_EXEC'] config = PyGriffinConfig() # quick check for default MPI exec value assert config.mpi_exec == 'mpirun' # expect failure because the griffin executable isn't a valid file with pytest.raises(ValueError) as e_info: Loading @@ -30,18 +34,21 @@ def test_griffin_config_fail(): def test_griffin_exec_direct(): config = PyGriffinConfig(griffin_exec=_GRIFFIN_MOCK_PATH, isoxml_exec=_ISOXML_MOCK_PATH) isoxml_exec=_ISOXML_MOCK_PATH, mpi_exec=_MPI_MOCK_PATH) assert config.griffin_exec == _GRIFFIN_MOCK_PATH assert config.isoxml_exec == _ISOXML_MOCK_PATH assert config.griffin_dir == _CWD assert config.mpi_exec == _MPI_MOCK_PATH assert config.griffin_dir == _TEST_DIR def test_griffin_exec_config(): PyGriffinConfig._RC_FILE = _CWD / '.pygriffin.test.rc' PyGriffinConfig._RC_FILE = _TEST_DIR / '.pygriffin.test.rc' config = PyGriffinConfig() assert config.griffin_exec == _GRIFFIN_MOCK_PATH assert config.isoxml_exec == _ISOXML_MOCK_PATH assert config.griffin_dir == _CWD assert config.mpi_exec == _MPI_MOCK_PATH assert config.griffin_dir == _TEST_DIR def test_griffin_env_config(): Loading @@ -50,8 +57,7 @@ def test_griffin_env_config(): config = PyGriffinConfig() assert config.griffin_exec == _GRIFFIN_MOCK_PATH assert config.isoxml_exec == _ISOXML_MOCK_PATH assert config.griffin_dir == _CWD assert config.griffin_dir == _TEST_DIR if __name__ == "__main__": pytest.main()