From 17a1336e5c350a025baf19588609231365fc6345 Mon Sep 17 00:00:00 2001 From: Thomas Adamcik Date: Sat, 16 Nov 2013 21:07:51 +0100 Subject: [PATCH] config: Add format_initial helper to populate empty configs. --- mopidy/config/__init__.py | 33 +++++++++++++++++++++++++++++++-- mopidy/config/types.py | 2 +- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/mopidy/config/__init__.py b/mopidy/config/__init__.py index 7ba5fff1..a45a19a4 100644 --- a/mopidy/config/__init__.py +++ b/mopidy/config/__init__.py @@ -10,7 +10,7 @@ import re from mopidy.config import keyring from mopidy.config.schemas import * # noqa from mopidy.config.types import * # noqa -from mopidy.utils import path +from mopidy.utils import path, versioning logger = logging.getLogger('mopidy.config') @@ -41,6 +41,17 @@ _proxy_schema['password'] = Secret(optional=True) _schemas = [_logging_schema, _loglevels_schema, _audio_schema, _proxy_schema] +_INITIAL_HELP = """ +# For further information about options in this file see: +# http://docs.mopidy.com/en/latest/config/ +# +# The initial commented out values reflect the defaults as of: +# %(versions)s +# +# Available options and defaults might have changed since then, +# run `mopidy config` to see the current effective config. +""" + def read(config_file): """Helper to load config defaults in same way across core and extensions""" @@ -69,6 +80,24 @@ def format(config, extensions, comments=None, display=True): return _format(config, comments or {}, schemas, display, False) +def format_initial(extensions): + config_dir = os.path.dirname(__file__) + defaults = [read(os.path.join(config_dir, 'default.conf'))] + defaults.extend(e.get_default_config() for e in extensions) + raw_config = _load([], defaults, []) + + schemas = _schemas[:] + schemas.extend(e.get_config_schema() for e in extensions) + + config, errors = _validate(raw_config, schemas) + + versions = ['Mopidy %s' % versioning.get_version()] + for extension in sorted(extensions, key=lambda ext: ext.dist_name): + versions.append('%s %s' % (extension.dist_name, extension.version)) + description = _INITIAL_HELP.strip() % {'versions': '\n# '.join(versions)} + return description + '\n\n' + _format(config, {}, schemas, False, True) + + def _load(files, defaults, overrides): parser = configparser.RawConfigParser() @@ -146,7 +175,7 @@ def _format(config, comments, schemas, display, disable): if disable: output[-1] = re.sub(r'^', b'#', output[-1], flags=re.M) output.append(b'') - return b'\n'.join(output[:-1]) + return b'\n'.join(output[:-1]).strip() def _preprocess(config_string): diff --git a/mopidy/config/types.py b/mopidy/config/types.py index 2d139b4f..d264de30 100644 --- a/mopidy/config/types.py +++ b/mopidy/config/types.py @@ -167,7 +167,7 @@ class List(ConfigValue): return tuple(values) def serialize(self, value, display=False): - return b'\n ' + b'\n '.join(encode(v) for v in value if v) + return b'\n ' + b'\n '.join(encode(v) for v in value if v) class LogLevel(ConfigValue):