Source code for boussole.conf.model

# -*- coding: utf-8 -*-
"""
Settings model
==============

This define the model object containing settings that will be passed to
interfaces.

"""
import copy

from boussole.conf import DEFAULT_SETTINGS


[docs]class Settings(object): """ Settings model object Class init method fills object attributes from default settings (``DEFAULT_SETTINGS``) then update it with initial settings if given. Settings are available as object attributes, there is also a private ``_settings`` attribute containing a dict of all stored settings. You are strongly advised to never directly manipulate the ``_settings`` attribute. Instead, allways use the ``update()`` method. Note: If you intend to manually open and fill a Settings instance, remember to allways use absolute paths in your settings. Relative path will cause issues in resolving that lead to wrong compilations. Keyword Arguments: initial (dict): A dictionnary of settings for initial values. """ def __init__(self, initial={}): self._settings = copy.deepcopy(DEFAULT_SETTINGS) if initial: initial = self.clean(initial) self._settings.update(initial) self.set_settings(self._settings)
[docs] def clean(self, settings): """ Filter given settings to keep only key names available in ``DEFAULT_SETTINGS``. Args: settings (dict): Loaded settings. Returns: dict: Settings object filtered. """ return {k: v for k, v in settings.items() if k in DEFAULT_SETTINGS}
[docs] def set_settings(self, settings): """ Set every given settings as object attributes. Args: settings (dict): Dictionnary of settings. """ for k, v in settings.items(): setattr(self, k, v)
[docs] def update(self, settings): """ Update object attributes from given settings Args: settings (dict): Dictionnary of elements to update settings. Returns: dict: Dictionnary of all current saved settings. """ settings = self.clean(settings) # Update internal dict self._settings.update(settings) # Push every setting items as class object attributes self.set_settings(settings) return self._settings