Mercurial > piecrust2
view foodtruck/config.py @ 587:d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Sat, 16 Jan 2016 14:24:35 -0800 |
parents | |
children | 79a31a3c947b |
line wrap: on
line source
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(): cfg_path = os.path.join(os.getcwd(), 'foodtruck.yml') return FoodTruckConfiguration(cfg_path) class FoodTruckConfigNotFoundError(Exception): pass class FoodTruckConfiguration(Configuration): def __init__(self, cfg_path): super(FoodTruckConfiguration, self).__init__() self.cfg_path = cfg_path 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: raise FoodTruckConfigNotFoundError() 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': '' } }