Add implementation and tests

This commit is contained in:
Roman Mogylatov 2020-08-24 12:38:22 -04:00
parent 69ebc19b5f
commit c3e93f8d4d
3 changed files with 2809 additions and 2479 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1140,6 +1140,15 @@ cdef class ConfigurationOption(Provider):
root = self.__root_ref()
return '.'.join((root.get_name(), self._get_self_name()))
def as_int(self):
return Callable(int, self)
def as_float(self):
return Callable(float, self)
def as_(self, callback, *args, **kwargs):
return Callable(callback, self, *args, **kwargs)
def override(self, value):
if isinstance(value, Provider):
raise Error('Configuration option can only be overridden by a value')

View File

@ -1,6 +1,7 @@
"""Dependency injector config providers unit tests."""
import contextlib
import decimal
import os
import sys
import tempfile
@ -69,6 +70,33 @@ class ConfigTests(unittest.TestCase):
self.assertEqual(abc(), 1)
self.assertEqual(abd(), 2)
def test_as_int(self):
value_provider = providers.Callable(lambda value: value, self.config.test.as_int())
self.config.from_dict({'test': '123'})
value = value_provider()
self.assertEqual(value, 123)
def test_as_float(self):
value_provider = providers.Callable(lambda value: value, self.config.test.as_float())
self.config.from_dict({'test': '123.123'})
value = value_provider()
self.assertEqual(value, 123.123)
def test_as_(self):
value_provider = providers.Callable(
lambda value: value,
self.config.test.as_(decimal.Decimal),
)
self.config.from_dict({'test': '123.123'})
value = value_provider()
self.assertEqual(value, decimal.Decimal('123.123'))
def test_providers_value_override(self):
a = self.config.a
ab = self.config.a.b
@ -358,7 +386,6 @@ class ConfigFromIniWithEnvInterpolationTests(unittest.TestCase):
self.assertEqual(self.config.section1.value1(), 'test-value')
class ConfigFromYamlTests(unittest.TestCase):
def setUp(self):