Mercurial > piecrust2
diff piecrust/admin/configuration.py @ 778:5e91bc0e3b4d
internal: Move admin panel code into the piecrust package.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Sat, 16 Jul 2016 15:02:24 +0200 |
parents | foodtruck/configuration.py@efc1dc916e7c |
children | 82509bce94ca |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/piecrust/admin/configuration.py Sat Jul 16 15:02:24 2016 +0200 @@ -0,0 +1,74 @@ +import os.path +import copy +import logging +import yaml +from piecrust.configuration import ( + Configuration, ConfigurationError, ConfigurationLoader, + merge_dicts) + + +logger = logging.getLogger(__name__) + + +def get_foodtruck_config(dirname=None, fallback_config=None): + dirname = dirname or os.getcwd() + cfg_path = os.path.join(dirname, 'foodtruck.yml') + return FoodTruckConfiguration(cfg_path, fallback_config) + + +class FoodTruckConfigNotFoundError(Exception): + pass + + +class FoodTruckConfiguration(Configuration): + def __init__(self, cfg_path, fallback_config=None): + super(FoodTruckConfiguration, self).__init__() + self.cfg_path = cfg_path + self.fallback_config = fallback_config + + def _load(self): + try: + with open(self.cfg_path, 'r', encoding='utf-8') as fp: + values = yaml.load( + fp.read(), + Loader=ConfigurationLoader) + + self._values = self._validateAll(values) + except OSError: + if self.fallback_config is None: + raise FoodTruckConfigNotFoundError() + + logger.debug("No FoodTruck configuration found, using fallback " + "configuration.") + self._values = copy.deepcopy(self.fallback_config) + except Exception as ex: + raise ConfigurationError( + "Error loading configuration from: %s" % + self.cfg_path) from ex + + def _validateAll(self, values): + if values is None: + values = {} + + values = merge_dicts(copy.deepcopy(default_configuration), values) + + return values + + def save(self): + with open(self.cfg_path, 'w', encoding='utf8') as fp: + self.cfg.write(fp) + + +default_configuration = { + 'triggers': { + 'bake': 'chef bake' + }, + 'scm': { + 'type': 'hg' + }, + 'security': { + 'username': '', + 'password': '' + } + } +