Merge "Add config_dirs property with a list of directories"
This commit is contained in:
@@ -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)))
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user