From 375c20732e25c43fe68e448810831d729e6daefd Mon Sep 17 00:00:00 2001 From: Thomas Adacmik Date: Sun, 28 Apr 2013 00:55:11 +0200 Subject: [PATCH] config: Create read-only config proxy --- mopidy/__main__.py | 11 +++++++---- mopidy/config/__init__.py | 20 ++++++++++++++++++++ 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/mopidy/__main__.py b/mopidy/__main__.py index aba68fec..a6900e09 100644 --- a/mopidy/__main__.py +++ b/mopidy/__main__.py @@ -74,17 +74,20 @@ def main(): log_extension_info(installed_extensions, enabled_extensions) check_config_errors(config_errors) - log.setup_log_levels(config) + # Read-only config from here one please. + proxied_config = config_lib.Proxy(config) + + log.setup_log_levels(proxied_config) create_file_structures() check_old_locations() ext.register_gstreamer_elements(enabled_extensions) # Anything that wants to exit after this point must use # mopidy.utils.process.exit_process as actors have been started. - audio = setup_audio(config) - backends = setup_backends(config, enabled_extensions, audio) + audio = setup_audio(proxied_config) + backends = setup_backends(proxied_config, enabled_extensions, audio) core = setup_core(audio, backends) - setup_frontends(config, enabled_extensions, core) + setup_frontends(proxied_config, enabled_extensions, core) loop.run() except KeyboardInterrupt: if logging_initialized: diff --git a/mopidy/config/__init__.py b/mopidy/config/__init__.py index 1c688182..0386eea8 100644 --- a/mopidy/config/__init__.py +++ b/mopidy/config/__init__.py @@ -144,3 +144,23 @@ def parse_override(override): section, remainder = override.split('/', 1) key, value = remainder.split('=', 1) return (section.strip(), key.strip(), value.strip()) + + +class Proxy(collections.Mapping): + def __init__(self, data): + self._data = data + + def __getitem__(self, key): + item = self._data.__getitem__(key) + if isinstance(item, dict): + return Proxy(item) + return item + + def __iter__(self): + return self._data.__iter__() + + def __len__(self): + return self._data.__len__() + + def __repr__(self): + return b'Proxy(%r)' % self._data