diff --git a/fsl/utils/settings.py b/fsl/utils/settings.py index 5be32c9a9e2296ab9b22e8fe48da46348c815b59..ceeb6bfe9060f6f8db8f28987869bc84e22628fc 100644 --- a/fsl/utils/settings.py +++ b/fsl/utils/settings.py @@ -128,8 +128,9 @@ def delete(*args, **kwargs): pass def readFile(*args, **kwargs): pass +@contextlib.contextmanager def writeFile(*args, **kwargs): - pass + yield def deleteFile(*args, **kwargs): pass def filePath(*args, **kwargs): @@ -420,7 +421,7 @@ class Settings(object): try: with open(configFile, 'wb') as f: pickle.dump(config, f, protocol=2) - except (FileNotFoundError, IOError, pickle.PicklingError, EOFError): + except (IOError, pickle.PicklingError, EOFError): log.warning('Unable to save {} configuration file ' '{}'.format(self.__configID, configFile), exc_info=True) diff --git a/tests/test_settings.py b/tests/test_settings.py index c906c63ce406427179c2cf015ec9c28ab816d32b..b17b1b87ab8e7ed747d2c2d0dd56d4e13053737a 100644 --- a/tests/test_settings.py +++ b/tests/test_settings.py @@ -433,6 +433,15 @@ def test_writeConfigFile(): readback = pickle.load(f) assert testdata == readback + # should fail gracefuly + # if write is not possible + s = settings.Settings(cfgid='test', cfgdir=testdir, writeOnExit=False) + + # testdir has been removed, + # but call should not crash + s.writeConfigFile() + + def test_set():