def test_cli_shadows_env(mocked_configs_path): config_load = config.ConfigLoad() parser = _args_to_parser([('--arg', {'default': 'default_cli'})]) config_load = config.ConfigLoad() parser.set_defaults(**config_load.get_section('lago')) config_load.update_parser(parser) assert config_load['arg'] == 'env' config_load.update_args(parser.parse_args(['--arg', 'cli'])) assert config_load['arg'] == 'cli'
def test_all_sources_root_section(mocked_configs_path, mocked_open): file1 = {'lago': {'arg1': 'file1', 'arg2': 'file1', 'arg3': 'file1'}} file2 = {'lago': {'arg1': 'file2', 'arg2': 'file2'}} parser = _args_to_parser([('--arg1', { 'default': 'parser' }), ('--arg2', { 'default': 'parser' }), ('--arg3', { 'default': 'parser' })]) args = ['--arg2', 'cli'] mocked_open.side_effect = [ _dict_to_handler(file1), _dict_to_handler(file2) ] config_load = config.ConfigLoad() parser.set_defaults(**config_load.get_section('lago')) config_load.update_parser(parser) config_load.update_args(parser.parse_args(args)) assert mocked_open.call_args_list == [ call('file1', 'r'), call('file2', 'r') ] assert config_load.get_section('lago') == { 'arg1': 'env', 'arg2': 'cli', 'arg3': 'file1' }
def test_update_root_parser(mocked_configs_path): parser = _args_to_parser([('--arg', {'default': 'arg_default'})]) config_load = config.ConfigLoad() config_load.update_parser(parser) assert config_load['arg'] == 'arg_default' assert config_load.get('arg') == 'arg_default' assert config_load.get_section('lago')['arg'] == 'arg_default'
def test_env_shadows_file(mocked_configs_path, mocked_open): file1 = {'lago': {'env': 'from_file'}} mocked_open.side_effect = [_dict_to_handler(file1)] config_load = config.ConfigLoad() assert mocked_configs_path.call_count == 1 assert mocked_open.call_args_list == [call('file1', 'r')] assert config_load.get_section('lago') == {'env': 'from_env'}
def test_args_loaded_from_file(mocked_configs_path, mocked_open): file1 = {'lago': {'arg0': 'val0'}, 'dummy': {'arg1': 'val1'}} mocked_open.side_effect = [_dict_to_handler(file1)] config_load = config.ConfigLoad() assert mocked_configs_path.call_count == 1 assert mocked_open.call_args_list == [call('file1', 'r')] assert config_load.get_section('dummy') == {'arg1': 'val1'} assert config_load.get_section('lago') == {'arg0': 'val0'}
def test_key_only_in_file_exists(mocked_configs_path, mocked_open): file1 = {'custom_section': {'custom': 'custom'}} parser = _args_to_parser([('--arg1', {'default': 'parser'})]) args = ['--arg1', 'cli'] mocked_open.side_effect = [_dict_to_handler(file1)] config_load = config.ConfigLoad() parser.set_defaults(**config_load.get_section('lago', {})) config_load.update_parser(parser) config_load.update_args(parser.parse_args(args)) assert mocked_open.call_args_list == [call('file1', 'r')] assert config_load.get_section('custom_section') == {'custom': 'custom'}
def test_file_shadows_cli_default(mocked_configs_path, mocked_open): file1 = {'lago': {'arg': 'arg_file'}} mocked_open.side_effect = [_dict_to_handler(file1), ] parser = _args_to_parser([('--arg', {'default': 'arg_default'})]) config_load = config.ConfigLoad() # although awkard looking - this mimics the round-trip in the code # look in cmd.py:create_parser parser.set_defaults(**config_load.get_section('lago')) config_load.update_parser(parser) assert mocked_configs_path.call_count == 1 assert mocked_open.call_args_list == [call('file1', 'r')] assert config_load['arg'] == 'arg_file'
def test_get_ini_include_unset(): defaults = {'lago': {'var1': 'val1'}} config_load = config.ConfigLoad(defaults=defaults) parser = _args_to_parser([('--var1', {}), ('--var2', {})]) config_load.update_parser(parser) assert config_load['var1'] == 'val1' config_load.update_args(parser.parse_args(['--var1', 'new'])) assert config_load['var1'] == 'new' ini = config_load.get_ini(incl_unset=True) configp = configparser.ConfigParser() configp.read_string(ini) assert configp.get('lago', 'var1') == 'new' assert '#var2 = None' in ini
def test_last_file_overrides(mocked_configs_path, mocked_open): file1 = {'section': {'var1': 'file1'}} file2 = {'section': {'var1': 'file2'}} mocked_open.side_effect = [ _dict_to_handler(file1), _dict_to_handler(file2) ] config_load = config.ConfigLoad() assert mocked_configs_path.call_count == 1 assert mocked_open.call_args_list == [ call('file1', 'r'), call('file2', 'r'), ] assert config_load.get_section('section') == {'var1': 'file2'}
def test_default_dict_empty(): config_load = config.ConfigLoad(root_section='section') assert config_load.get_section('section') is None
def test_get_ini(defaults): config_load = config.ConfigLoad(defaults=defaults) expected = _ini_from_dict(defaults) assert config_load.get_ini() == expected
def test_default_dict_loading(defaults): config_load = config.ConfigLoad(defaults=defaults) for key, value in defaults.iteritems(): assert config_load.get_section(key) == value
def test_get_ini(defaults): with patch('lago.config._get_configs_path', return_value=[]): config_load = config.ConfigLoad(defaults=defaults) expected = _ini_from_dict(defaults) assert config_load.get_ini() == expected
def test_default_dict_loading(defaults): with patch('lago.config._get_configs_path', return_value=[]): config_load = config.ConfigLoad(defaults=defaults) for key, value in six.iteritems(defaults): assert config_load.get_section(key) == value