Add Configuration.from_ini() method

This commit is contained in:
Roman Mogylatov 2020-06-23 16:46:24 -04:00
parent 3a0c746430
commit 87bb5ff97d
4 changed files with 3390 additions and 2923 deletions

View File

@ -7,6 +7,10 @@ that were made in every particular version.
From version 0.7.6 *Dependency Injector* framework strictly
follows `Semantic versioning`_
Development version
-------------------
- Add ``Configuration.from_ini()`` method to load configuration from ini file.
3.17.1
------
- Fix ``DynamicContainer`` deep-copying bug.

File diff suppressed because it is too large Load Diff

View File

@ -21,6 +21,10 @@ else:
else:
_is_coroutine_marker = True
try:
import ConfigParser as iniconfigparser
except ImportError:
import configparser as iniconfigparser
from .errors import (
Error,
@ -1155,6 +1159,23 @@ cdef class Configuration(Object):
"""
self.override(value)
def from_ini(self, filepath):
"""Load configuration from ini file.
:param filepath: Path to the configuration file.
:type filepath: str
:rtype: None
"""
parser = iniconfigparser.ConfigParser()
parser.read([filepath])
config = {}
for section in parser.sections():
config[section] = dict(parser[section])
self.override(config)
def _create_children(self, value):
children = dict()

View File

@ -1,5 +1,8 @@
"""Dependency injector config providers unit tests."""
import os
import tempfile
import unittest2 as unittest
from dependency_injector import containers, providers
@ -246,3 +249,32 @@ class ConfigLinkingTests(unittest.TestCase):
self.assertEqual(services.config(), {'value': 'services2'})
self.assertEqual(services.config.value(), 'services2')
self.assertEqual(services.value_getter(), 'services2')
class ConfigFromIniTests(unittest.TestCase):
def setUp(self):
self.config = providers.Configuration(name='config')
_, self.config_file = tempfile.mkstemp()
with open(self.config_file, 'w') as config_file:
config_file.write(
'[section1]\n'
'value1=1\n'
'\n'
'[section2]\n'
'value2=2\n'
)
def tearDown(self):
del self.config
os.unlink(self.config_file)
def test(self):
self.config.from_ini(self.config_file)
self.assertEqual(self.config(), {'section1': {'value1': '1'}, 'section2': {'value2': '2'}})
self.assertEqual(self.config.section1(), {'value1': '1'})
self.assertEqual(self.config.section1.value1(), '1')
self.assertEqual(self.config.section2(), {'value2': '2'})
self.assertEqual(self.config.section2.value2(), '2')