Update from_env()

This commit is contained in:
Roman Mogylatov 2021-01-23 21:54:03 -05:00
parent 91b9c6814a
commit ba86005ae3
3 changed files with 3928 additions and 3658 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1392,18 +1392,24 @@ cdef class ConfigurationOption(Provider):
current_config = {}
self.override(merge_dicts(current_config, options))
def from_env(self, name, default=None):
def from_env(self, name, default=UNDEFINED):
"""Load configuration value from the environment variable.
:param name: Name of the environment variable.
:type name: str
:param default: Default value that is used if environment variable does not exist.
:type default: str
:type default: object
:rtype: None
"""
value = os.getenv(name, default)
value = os.environ.get(name, default)
if value is UNDEFINED:
if self._is_strict_mode_enabled():
raise ValueError('Environment variable "{0}" is undefined'.format(name))
value = None
self.override(value)
def _is_strict_mode_enabled(self):
@ -1691,18 +1697,24 @@ cdef class Configuration(Object):
current_config = {}
self.override(merge_dicts(current_config, options))
def from_env(self, name, default=None):
def from_env(self, name, default=UNDEFINED):
"""Load configuration value from the environment variable.
:param name: Name of the environment variable.
:type name: str
:param default: Default value that is used if environment variable does not exist.
:type default: str
:type default: object
:rtype: None
"""
value = os.getenv(name, default)
value = os.environ.get(name, default)
if value is UNDEFINED:
if self.__strict:
raise ValueError('Environment variable "{0}" is undefined'.format(name))
value = None
self.override(value)

View File

@ -745,6 +745,34 @@ class ConfigFromEnvTests(unittest.TestCase):
self.config.from_env('UNDEFINED_ENV', 'default-value')
self.assertEqual(self.config(), 'default-value')
def test_undefined_in_strict_mode(self):
self.config = providers.Configuration(strict=True)
with self.assertRaises(ValueError):
self.config.from_env('UNDEFINED_ENV')
def test_option_undefined_in_strict_mode(self):
self.config = providers.Configuration(strict=True)
with self.assertRaises(ValueError):
self.config.option.from_env('UNDEFINED_ENV')
def test_undefined_in_strict_mode_with_default(self):
self.config = providers.Configuration(strict=True)
self.config.from_env('UNDEFINED_ENV', 'default-value')
self.assertEqual(self.config(), 'default-value')
def test_option_undefined_in_strict_mode_with_default(self):
self.config = providers.Configuration(strict=True)
self.config.option.from_env('UNDEFINED_ENV', 'default-value')
self.assertEqual(self.config.option(), 'default-value')
def test_default_none(self):
self.config.from_env('UNDEFINED_ENV')
self.assertIsNone(self.config())
def test_option_default_none(self):
self.config.option.from_env('UNDEFINED_ENV')
self.assertIsNone(self.config.option())
def test_with_children(self):
self.config.section1.value1.from_env('CONFIG_TEST_ENV')