From ffbe921a2f629532231d60a1b632045ab771c378 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Ma=C5=9Blanka?= <piotr.maslanka@henrietta.com.pl> Date: Thu, 7 Mar 2024 08:28:49 +0100 Subject: [PATCH] DirectorySource will raise an exception if directory does not exist and on_fail is set to RAISE --- CHANGELOG.md | 1 + satella/__init__.py | 2 +- satella/configuration/sources/file.py | 15 +++++++++------ .../test_configuration/test_sources/test_file.py | 7 +++++++ 4 files changed, 18 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0ad1d67a..e9110c8f 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 507e1b6b..b8a2e669 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 1c6732a8..9a1607ee 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 c27ff676..a3ddf43e 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 -- GitLab