config: Support passing directories to mopidy --config
This commit is contained in:
parent
0863a813fa
commit
9e41eff187
@ -17,6 +17,8 @@ Bug fix release.
|
|||||||
- Logging: Fix that some loggers would be disabled if
|
- Logging: Fix that some loggers would be disabled if
|
||||||
:confval:`logging/config_file` was set. (Fixes: :issue:`740`)
|
:confval:`logging/config_file` was set. (Fixes: :issue:`740`)
|
||||||
|
|
||||||
|
- Configuration: :option:`mopidy --config` now supports directories.
|
||||||
|
|
||||||
|
|
||||||
v0.19.3 (2014-08-03)
|
v0.19.3 (2014-08-03)
|
||||||
====================
|
====================
|
||||||
|
|||||||
@ -116,21 +116,14 @@ def _load(files, defaults, overrides):
|
|||||||
parser.readfp(io.BytesIO(default))
|
parser.readfp(io.BytesIO(default))
|
||||||
|
|
||||||
# Load config from a series of config files
|
# Load config from a series of config files
|
||||||
for filename in files:
|
for name in files:
|
||||||
try:
|
if os.path.isdir(name):
|
||||||
with io.open(filename, 'rb') as filehandle:
|
for filename in os.listdir(name):
|
||||||
parser.readfp(filehandle)
|
filename = os.path.join(name, filename)
|
||||||
except configparser.MissingSectionHeaderError as e:
|
if os.path.isfile(filename):
|
||||||
logger.warning('%s does not have a config section, not loaded.',
|
_load_file(parser, filename)
|
||||||
filename)
|
else:
|
||||||
except configparser.ParsingError as e:
|
_load_file(parser, name)
|
||||||
linenos = ', '.join(str(lineno) for lineno, line in e.errors)
|
|
||||||
logger.warning(
|
|
||||||
'%s has errors, line %s has been ignored.', filename, linenos)
|
|
||||||
except IOError:
|
|
||||||
# TODO: if this is the initial load of logging config we might not
|
|
||||||
# have a logger at this point, we might want to handle this better.
|
|
||||||
logger.debug('Config file %s not found; skipping', filename)
|
|
||||||
|
|
||||||
# If there have been parse errors there is a python bug that causes the
|
# If there have been parse errors there is a python bug that causes the
|
||||||
# values to be lists, this little trick coerces these into strings.
|
# values to be lists, this little trick coerces these into strings.
|
||||||
@ -146,6 +139,23 @@ def _load(files, defaults, overrides):
|
|||||||
return raw_config
|
return raw_config
|
||||||
|
|
||||||
|
|
||||||
|
def _load_file(parser, filename):
|
||||||
|
try:
|
||||||
|
with io.open(filename, 'rb') as filehandle:
|
||||||
|
parser.readfp(filehandle)
|
||||||
|
except configparser.MissingSectionHeaderError as e:
|
||||||
|
logger.warning('%s does not have a config section, not loaded.',
|
||||||
|
filename)
|
||||||
|
except configparser.ParsingError as e:
|
||||||
|
linenos = ', '.join(str(lineno) for lineno, line in e.errors)
|
||||||
|
logger.warning(
|
||||||
|
'%s has errors, line %s has been ignored.', filename, linenos)
|
||||||
|
except IOError:
|
||||||
|
# TODO: if this is the initial load of logging config we might not
|
||||||
|
# have a logger at this point, we might want to handle this better.
|
||||||
|
logger.debug('Config file %s not found; skipping', filename)
|
||||||
|
|
||||||
|
|
||||||
def _validate(raw_config, schemas):
|
def _validate(raw_config, schemas):
|
||||||
# Get validated config
|
# Get validated config
|
||||||
config = {}
|
config = {}
|
||||||
|
|||||||
@ -60,6 +60,12 @@ class LoadConfigTest(unittest.TestCase):
|
|||||||
result = config._load([file1, file2], [], [])
|
result = config._load([file1, file2], [], [])
|
||||||
self.assertEqual(expected, result)
|
self.assertEqual(expected, result)
|
||||||
|
|
||||||
|
def test_load_directory(self):
|
||||||
|
directory = path_to_data_dir('conf.d')
|
||||||
|
expected = {'foo': {'bar': 'baz'}, 'foo2': {'bar': 'baz'}}
|
||||||
|
result = config._load([directory], [], [])
|
||||||
|
self.assertEqual(expected, result)
|
||||||
|
|
||||||
def test_load_file_with_utf8(self):
|
def test_load_file_with_utf8(self):
|
||||||
expected = {'foo': {'bar': 'æøå'.encode('utf-8')}}
|
expected = {'foo': {'bar': 'æøå'.encode('utf-8')}}
|
||||||
result = config._load([path_to_data_dir('file3.conf')], [], [])
|
result = config._load([path_to_data_dir('file3.conf')], [], [])
|
||||||
|
|||||||
2
tests/data/conf.d/file1.conf
Normal file
2
tests/data/conf.d/file1.conf
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
[foo]
|
||||||
|
bar = baz
|
||||||
2
tests/data/conf.d/file2.conf
Normal file
2
tests/data/conf.d/file2.conf
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
[foo2]
|
||||||
|
bar = baz
|
||||||
Loading…
Reference in New Issue
Block a user