Merge "Add config_dirs property with a list of directories"

This commit is contained in:
Jenkins
2016-02-18 20:42:00 +00:00
committed by Gerrit Code Review
2 changed files with 26 additions and 4 deletions

View File

@@ -1458,6 +1458,7 @@ class _ConfigDirOpt(Opt):
:raises: ConfigFileParseError, ConfigFileValueError,
ConfigDirNotFoundError
"""
namespace._config_dirs.append(values)
setattr(namespace, self.dest, values)
values = os.path.expanduser(values)
@@ -1471,7 +1472,7 @@ class _ConfigDirOpt(Opt):
ConfigParser._parse_file(config_file, namespace)
def __init__(self, name, **kwargs):
super(_ConfigDirOpt, self).__init__(name, type=types.String(),
super(_ConfigDirOpt, self).__init__(name, type=types.List(),
**kwargs)
def _get_argparse_kwargs(self, group, **kwargs):
@@ -1778,6 +1779,7 @@ class _Namespace(argparse.Namespace):
self._emitted_deprecations = set()
self._files_not_found = []
self._files_permission_denied = []
self._config_dirs = []
def _parse_cli_opts_from_config_file(self, sections, normalized):
"""Parse CLI options from a config file.
@@ -2450,6 +2452,10 @@ class ConfigOpts(collections.Mapping):
info.pop('default', None)
info.pop('override', None)
@property
def config_dirs(self):
return self._namespace._config_dirs
def find_file(self, name):
"""Locate a file located alongside the config files.
@@ -2468,8 +2474,9 @@ class ConfigOpts(collections.Mapping):
:returns: the path to a matching file, or None
"""
dirs = []
if self.config_dir:
dirs.append(_fixpath(self.config_dir))
if self._namespace._config_dirs:
for directory in self._namespace._config_dirs:
dirs.append(_fixpath(directory))
for cf in reversed(self.config_file):
dirs.append(os.path.dirname(_fixpath(cf)))

View File

@@ -3157,15 +3157,30 @@ class FindFileTestCase(BaseTestCase):
self.assertEqual(self.conf.find_file('policy.json'), paths[1])
def test_find_policy_file_with_multiple_config_dirs(self):
dir1 = tempfile.mkdtemp()
self.tempdirs.append(dir1)
dir2 = tempfile.mkdtemp()
self.tempdirs.append(dir2)
self.conf(['--config-dir', dir1, '--config-dir', dir2])
self.assertEqual(2, len(self.conf.config_dirs))
self.assertEqual(dir1, self.conf.config_dirs[0])
self.assertEqual(dir2, self.conf.config_dirs[1])
def test_find_policy_file_with_config_dir(self):
dir = tempfile.mkdtemp()
self.tempdirs.append(dir)
dir2 = tempfile.mkdtemp()
self.tempdirs.append(dir2)
path = self.create_tempfiles([(os.path.join(dir, 'policy.json'),
'{}')],
ext='')[0]
self.conf(['--config-dir', dir])
self.conf(['--config-dir', dir, '--config-dir', dir2])
self.assertEqual(self.conf.find_file('policy.json'), path)