diff --git a/CHANGELOG.md b/CHANGELOG.md index 0ad1d67a55c10c032a99cd5cd4e74baf07fc4bef..e9110c8f284ee709df4a8b56f63b3e7e9559822b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ * added safe_listdir * fixed a bug occurring in Python 3.10 with whereis +* DirectorySource will raise an exception if directory does not exist and on_fail is set to RAISE Build system ============ diff --git a/satella/__init__.py b/satella/__init__.py index 507e1b6be362c54a8b3c4fbff9902325a760c53a..b8a2e669b691ad10da88afcdd72ca15a361fbfd7 100644 --- a/satella/__init__.py +++ b/satella/__init__.py @@ -1 +1 @@ -__version__ = '2.25.0a2' +__version__ = '2.25.0a3' diff --git a/satella/configuration/sources/file.py b/satella/configuration/sources/file.py index 1c6732a850e45809a42cccc6897de97d3df1b94e..9a1607ee9c5b3321e02f0fcdc09a4598f9020953 100644 --- a/satella/configuration/sources/file.py +++ b/satella/configuration/sources/file.py @@ -30,9 +30,9 @@ class FileSource(BaseSource): """ super().__init__() from .. import sources - self.source_classes = [ # type: tp.List[tp.Type[FormatSource]] + self.source_classes = [ (p if not isinstance(p, str) else getattr(sources, p)) for p in - interpret_as] + interpret_as] # type: tp.List[tp.Type[FormatSource]] self.path = path # type: str self.encoding = encoding # type: str @@ -93,10 +93,13 @@ class DirectorySource(FileSource): try: files = self.filter(os.path.join(directory, x) for x in os.listdir(directory)) except OSError as e: - logger.warning( - 'OSError %s while accessing configuration directory %s, skipping files' % ( - e, directory)) - return [] + if self.on_fail == DirectorySource.SILENT: + logger.warning( + 'OSError %s while accessing configuration directory %s, skipping files' % ( + e, directory)) + return [] + else: + raise ConfigurationError(f'Directory {directory} does not exist') for file_name in files: diff --git a/tests/test_configuration/test_sources/test_file.py b/tests/test_configuration/test_sources/test_file.py index c27ff6768ef26e6c7120a5c1937ead96f0a8a7b8..a3ddf43e674543f04dc628010f6877e0c1d39044 100644 --- a/tests/test_configuration/test_sources/test_file.py +++ b/tests/test_configuration/test_sources/test_file.py @@ -5,6 +5,7 @@ import unittest from satella.coding import silence_excs from satella.configuration.sources import FileSource, FORMAT_SOURCES, \ DirectorySource +from satella.exceptions import ConfigurationError from .utils import SourceTestCase @@ -54,6 +55,12 @@ class TestDirectorySource(SourceTestCase): self.assertEqual(self.ds.provide(), {'amqp': 'amqp', 'logstash': {'host': 'localhost', 'port': 9600}}) + def test_invalid_directory(self): + ds = DirectorySource('not-existing', on_fail=DirectorySource.SILENT) + self.assertEqual(ds.provide(), {}) + ds = DirectorySource('not-existing', on_fail=DirectorySource.RAISE) + self.assertRaises(ConfigurationError, ds.provide) + def test_directory_source(self): with tempfile.TemporaryDirectory() as outdir: self.filename = outdir