config: Move all code to new load function
This commit is contained in:
parent
78d3888dd1
commit
08db8829af
@ -49,7 +49,7 @@ def main():
|
||||
|
||||
try:
|
||||
# Initial config without extensions to bootstrap logging.
|
||||
logging_config, _ = get_config(config_files, [], config_overrides)
|
||||
logging_config, _ = config_lib.load(config_files, [], config_overrides)
|
||||
|
||||
# TODO: setup_logging needs defaults in-case config values are None
|
||||
log.setup_logging(
|
||||
@ -58,7 +58,7 @@ def main():
|
||||
installed_extensions = ext.load_extensions()
|
||||
|
||||
# TODO: wrap config in RO proxy.
|
||||
config, config_errors = get_config(
|
||||
config, config_errors = config_lib.load(
|
||||
config_files, installed_extensions, config_overrides)
|
||||
|
||||
# Filter out disabled extensions and remove any config errors for them.
|
||||
@ -96,19 +96,6 @@ def main():
|
||||
process.stop_remaining_actors()
|
||||
|
||||
|
||||
# TODO: move to config
|
||||
def get_config(files, extensions, overrides):
|
||||
# Helper to get configs, as our config system should not need to know about
|
||||
# extensions.
|
||||
defaults = [config_lib.core_defaults]
|
||||
defaults.extend(e.get_default_config() for e in extensions)
|
||||
raw_config = config_lib._load(files, defaults, overrides)
|
||||
|
||||
schemas = config_lib.core_schemas[:]
|
||||
schemas.extend(e.get_config_schema() for e in extensions)
|
||||
return config_lib._validate(raw_config, schemas)
|
||||
|
||||
|
||||
def log_extension_info(all_extensions, enabled_extensions):
|
||||
# TODO: distinguish disabled vs blocked by env?
|
||||
enabled_names = set(e.ext_name for e in enabled_extensions)
|
||||
@ -185,14 +172,19 @@ def show_config_callback(option, opt, value, parser):
|
||||
overrides = getattr(parser.values, 'overrides', [])
|
||||
|
||||
extensions = ext.load_extensions()
|
||||
raw_config = config_lib.load(files, overrides, extensions)
|
||||
enabled_extensions = ext.filter_enabled_extensions(raw_config, extensions)
|
||||
config = config_lib.validate(
|
||||
raw_config, config_lib.core_schemas, enabled_extensions)
|
||||
enabled_extensions = []
|
||||
|
||||
config, errors = config_lib.load(files, extensions, overrides)
|
||||
|
||||
for extension in extensions:
|
||||
if ext.validate_extension(extension, config):
|
||||
enabled_extensions.append(extension)
|
||||
elif extension.ext_name in errors:
|
||||
del errors[extension.ext_name]
|
||||
|
||||
# TODO: create mopidy.config.format?
|
||||
output = []
|
||||
for schema in config_lib.core_schemas:
|
||||
for schema in config_lib._schemas:
|
||||
options = config.get(schema.name, {})
|
||||
if not options:
|
||||
continue
|
||||
@ -205,7 +197,7 @@ def show_config_callback(option, opt, value, parser):
|
||||
options = config.get(schema.name, {})
|
||||
output.append(schema.format(options))
|
||||
else:
|
||||
lines = ['[%s]' % schema.name, 'enabled = false',
|
||||
lines = ['[%s]' % schema.name,
|
||||
'# Config hidden as extension is disabled']
|
||||
output.append('\n'.join(lines))
|
||||
|
||||
|
||||
@ -12,8 +12,6 @@ from mopidy.utils import path
|
||||
|
||||
logger = logging.getLogger('mopidy.config')
|
||||
|
||||
_config_dir = os.path.dirname(__file__)
|
||||
|
||||
_logging_schema = ConfigSchema('logging')
|
||||
_logging_schema['console_format'] = String()
|
||||
_logging_schema['debug_format'] = String()
|
||||
@ -34,11 +32,7 @@ _proxy_schema['password'] = Secret(optional=True)
|
||||
# NOTE: if multiple outputs ever comes something like LogLevelConfigSchema
|
||||
#_outputs_schema = config.AudioOutputConfigSchema()
|
||||
|
||||
#: Config schemas used by mopidy itself.
|
||||
core_schemas = [_logging_schema, _loglevels_schema, _audio_schema, _proxy_schema]
|
||||
|
||||
#: Config default used by mopidy itself.
|
||||
core_defaults = io.open(os.path.join(_config_dir, 'default.conf'), 'rb').read()
|
||||
_schemas = [_logging_schema, _loglevels_schema, _audio_schema, _proxy_schema]
|
||||
|
||||
|
||||
def read(config_file):
|
||||
@ -47,15 +41,19 @@ def read(config_file):
|
||||
return filehandle.read()
|
||||
|
||||
|
||||
def load(files, overrides, extensions=None):
|
||||
def load(files, extensions, overrides):
|
||||
# Helper to get configs, as the rest of our config system should not need
|
||||
# to know about extensions.
|
||||
config_dir = os.path.dirname(__file__)
|
||||
defaults = [read(os.path.join(config_dir, 'default.conf'))]
|
||||
if extensions:
|
||||
defaults.extend(e.get_default_config() for e in extensions)
|
||||
return _load(files, defaults, overrides)
|
||||
defaults.extend(e.get_default_config() for e in extensions)
|
||||
raw_config = _load(files, defaults, overrides)
|
||||
|
||||
schemas = _schemas[:]
|
||||
schemas.extend(e.get_config_schema() for e in extensions)
|
||||
return _validate(raw_config, schemas)
|
||||
|
||||
|
||||
# TODO: replace load() with this version of API.
|
||||
def _load(files, defaults, overrides):
|
||||
parser = configparser.RawConfigParser()
|
||||
|
||||
@ -88,21 +86,6 @@ def _load(files, defaults, overrides):
|
||||
return raw_config
|
||||
|
||||
|
||||
def validate(raw_config, schemas, extensions=None):
|
||||
# Collect config schemas to validate against
|
||||
extension_schemas = [e.get_config_schema() for e in extensions or []]
|
||||
config, errors = _validate(raw_config, schemas + extension_schemas)
|
||||
|
||||
if errors:
|
||||
for section in errors:
|
||||
for key, error in errors[section].items():
|
||||
logger.error('Config value %s/%s %s', section, key, error)
|
||||
sys.exit(1)
|
||||
|
||||
return config
|
||||
|
||||
|
||||
# TODO: replace validate() with this version of API.
|
||||
def _validate(raw_config, schemas):
|
||||
# Get validated config
|
||||
config = {}
|
||||
|
||||
@ -48,17 +48,17 @@ def main():
|
||||
config_overrides = []
|
||||
|
||||
# TODO: decide if we want to avoid this boilerplate some how.
|
||||
logging_config = config_lib.load(config_files, config_overrides)
|
||||
# Initial config without extensions to bootstrap logging.
|
||||
logging_config, _ = config_lib.load(config_files, [], config_overrides)
|
||||
log.setup_root_logger()
|
||||
log.setup_console_logging(logging_config, options.verbosity_level)
|
||||
|
||||
extensions = ext.load_extensions()
|
||||
raw_config = config_lib.load(config_files, config_overrides, extensions)
|
||||
extensions = ext.filter_enabled_extensions(raw_config, extensions)
|
||||
config = config_lib.validate(
|
||||
raw_config, config_lib.core_schemas, extensions)
|
||||
config, errors = config_lib.load(config_files, extensions, config_overrides)
|
||||
log.setup_log_levels(config)
|
||||
|
||||
# TODO: missing error checking and other default setup code.
|
||||
|
||||
tracks = []
|
||||
|
||||
def store(data):
|
||||
|
||||
Loading…
Reference in New Issue
Block a user