Comment yaml-related code

This commit is contained in:
Roman Mogylatov 2020-06-24 17:16:46 -04:00
parent f7871dfc49
commit 52c98bbe49
5 changed files with 3211 additions and 3715 deletions

View File

@ -40,11 +40,11 @@ setup(name='dependency-injector',
url='https://github.com/ets-labs/python-dependency-injector', url='https://github.com/ets-labs/python-dependency-injector',
download_url='https://pypi.python.org/pypi/dependency_injector', download_url='https://pypi.python.org/pypi/dependency_injector',
install_requires=requirements, install_requires=requirements,
extras_require={ # extras_require={
'yaml': [ # 'yaml': [
'pyyaml', # 'pyyaml',
], # ],
}, # },
package_dir={ package_dir={
'': 'src', '': 'src',
}, },

File diff suppressed because it is too large Load Diff

View File

@ -26,10 +26,11 @@ try:
except ImportError: except ImportError:
import configparser as iniconfigparser import configparser as iniconfigparser
try: # try:
import yaml # import yaml
except ImportError: # except ImportError:
yaml = None # yaml = None
# yaml = None
from .errors import ( from .errors import (
Error, Error,
@ -1021,7 +1022,9 @@ cdef class Configuration(Object):
print(config.section1.option2()) # 2 print(config.section1.option2()) # 2
""" """
def __init__(self, name='config', default=None): DEFAULT_NAME = 'config'
def __init__(self, name=None, default=None):
"""Initializer. """Initializer.
:param name: Name of configuration unit. :param name: Name of configuration unit.
@ -1032,6 +1035,9 @@ cdef class Configuration(Object):
""" """
super(Configuration, self).__init__(default) super(Configuration, self).__init__(default)
if name is None:
name = self.DEFAULT_NAME
self.__name = name self.__name = name
self.__children = self._create_children(default) self.__children = self._create_children(default)
self.__linked = list() self.__linked = list()
@ -1197,30 +1203,30 @@ cdef class Configuration(Object):
current_config = {} current_config = {}
self.override(merge_dicts(current_config, config)) self.override(merge_dicts(current_config, config))
def from_yaml(self, filepath): # def from_yaml(self, filepath):
"""Load configuration from yaml file. # """Load configuration from yaml file.
#
Loaded configuration is merged recursively over current configuration. # Loaded configuration is merged recursively over current configuration.
#
:param filepath: Path to the configuration file. # :param filepath: Path to the configuration file.
:type filepath: str # :type filepath: str
#
:rtype: None # :rtype: None
""" # """
if yaml is None: # if yaml is None:
raise Error( # raise Error(
'Unable to load yaml configuration - PyYAML is not installed. ' # 'Unable to load yaml configuration - PyYAML is not installed. '
'Install PyYAML or install Dependency Injector with yaml extras: ' # 'Install PyYAML or install Dependency Injector with yaml extras: '
'"pip install dependency-injector[yaml]"' # '"pip install dependency-injector[yaml]"'
) # )
#
with open(filepath) as opened_file: # with open(filepath) as opened_file:
config = yaml.load(opened_file, yaml.Loader) # config = yaml.load(opened_file, yaml.Loader)
#
current_config = self.__call__() # current_config = self.__call__()
if not current_config: # if not current_config:
current_config = {} # current_config = {}
self.override(merge_dicts(current_config, config)) # self.override(merge_dicts(current_config, config))
def _create_children(self, value): def _create_children(self, value):
children = dict() children = dict()

View File

@ -381,91 +381,91 @@ class ConfigFromIniTests(unittest.TestCase):
self.assertEqual(self.config.section2.value2(), '2') self.assertEqual(self.config.section2.value2(), '2')
self.assertEqual(self.config.section3(), {'value3': '3'}) self.assertEqual(self.config.section3(), {'value3': '3'})
self.assertEqual(self.config.section3.value3(), '3') self.assertEqual(self.config.section3.value3(), '3')
#
#
class ConfigFromYamlTests(unittest.TestCase): # class ConfigFromYamlTests(unittest.TestCase):
#
def setUp(self): # def setUp(self):
self.config = providers.Configuration(name='config') # self.config = providers.Configuration(name='config')
#
_, self.config_file_1 = tempfile.mkstemp() # _, self.config_file_1 = tempfile.mkstemp()
with open(self.config_file_1, 'w') as config_file: # with open(self.config_file_1, 'w') as config_file:
config_file.write( # config_file.write(
'section1:\n' # 'section1:\n'
' value1: 1\n' # ' value1: 1\n'
'\n' # '\n'
'section2:\n' # 'section2:\n'
' value2: 2\n' # ' value2: 2\n'
) # )
#
_, self.config_file_2 = tempfile.mkstemp() # _, self.config_file_2 = tempfile.mkstemp()
with open(self.config_file_2, 'w') as config_file: # with open(self.config_file_2, 'w') as config_file:
config_file.write( # config_file.write(
'section1:\n' # 'section1:\n'
' value1: 11\n' # ' value1: 11\n'
' value11: 11\n' # ' value11: 11\n'
'section3:\n' # 'section3:\n'
' value3: 3\n' # ' value3: 3\n'
) # )
#
def tearDown(self): # def tearDown(self):
del self.config # del self.config
os.unlink(self.config_file_1) # os.unlink(self.config_file_1)
os.unlink(self.config_file_2) # os.unlink(self.config_file_2)
#
def test(self): # def test(self):
self.config.from_yaml(self.config_file_1) # self.config.from_yaml(self.config_file_1)
#
self.assertEqual(self.config(), {'section1': {'value1': 1}, 'section2': {'value2': 2}}) # 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.section1.value1(), 1) # self.assertEqual(self.config.section1.value1(), 1)
self.assertEqual(self.config.section2(), {'value2': 2}) # self.assertEqual(self.config.section2(), {'value2': 2})
self.assertEqual(self.config.section2.value2(), 2) # self.assertEqual(self.config.section2.value2(), 2)
#
def test_merge(self): # def test_merge(self):
self.config.from_yaml(self.config_file_1) # self.config.from_yaml(self.config_file_1)
self.config.from_yaml(self.config_file_2) # self.config.from_yaml(self.config_file_2)
#
self.assertEqual( # self.assertEqual(
self.config(), # self.config(),
{ # {
'section1': { # 'section1': {
'value1': 11, # 'value1': 11,
'value11': 11, # 'value11': 11,
}, # },
'section2': { # 'section2': {
'value2': 2, # 'value2': 2,
}, # },
'section3': { # 'section3': {
'value3': 3, # 'value3': 3,
}, # },
}, # },
) # )
self.assertEqual(self.config.section1(), {'value1': 11, 'value11': 11}) # self.assertEqual(self.config.section1(), {'value1': 11, 'value11': 11})
self.assertEqual(self.config.section1.value1(), 11) # self.assertEqual(self.config.section1.value1(), 11)
self.assertEqual(self.config.section1.value11(), 11) # self.assertEqual(self.config.section1.value11(), 11)
self.assertEqual(self.config.section2(), {'value2': 2}) # self.assertEqual(self.config.section2(), {'value2': 2})
self.assertEqual(self.config.section2.value2(), 2) # self.assertEqual(self.config.section2.value2(), 2)
self.assertEqual(self.config.section3(), {'value3': 3}) # self.assertEqual(self.config.section3(), {'value3': 3})
self.assertEqual(self.config.section3.value3(), 3) # self.assertEqual(self.config.section3.value3(), 3)
#
def test_no_yaml_installed(self): # def test_no_yaml_installed(self):
@contextlib.contextmanager # @contextlib.contextmanager
def no_yaml_module(): # def no_yaml_module():
yaml = providers.yaml # yaml = providers.yaml
providers.yaml = None # providers.yaml = None
#
yield # yield
#
providers.yaml = yaml # providers.yaml = yaml
#
with no_yaml_module(): # with no_yaml_module():
with self.assertRaises(errors.Error) as error: # with self.assertRaises(errors.Error) as error:
self.config.from_yaml(self.config_file_1) # self.config.from_yaml(self.config_file_1)
#
self.assertEqual( # self.assertEqual(
error.exception.args[0], # error.exception.args[0],
'Unable to load yaml configuration - PyYAML is not installed. ' # 'Unable to load yaml configuration - PyYAML is not installed. '
'Install PyYAML or install Dependency Injector with yaml extras: ' # 'Install PyYAML or install Dependency Injector with yaml extras: '
'"pip install dependency-injector[yaml]"', # '"pip install dependency-injector[yaml]"',
) # )

View File

@ -5,7 +5,6 @@ envlist=
[testenv] [testenv]
deps= deps=
unittest2 unittest2
extras = yaml
commands= commands=
unit2 discover -s tests/unit -p test_*_py3.py unit2 discover -s tests/unit -p test_*_py3.py