def load_yaml(file_path, **options): yaml_file = _yamls(file_path) # If the encrypted yaml doesn't exist, bail out if not os.path.exists(yaml_file.encrypted): return # If there's an unencyrpted yaml, issue a warning and bail out if os.path.exists(yaml_file.unencrypted): warn_msg = ('yaml "{}" and eyaml present for "{}" config. ' 'Ignoring encrypted yaml.').format(*yaml_file) warnings.warn(warn_msg, YayclCryptWarning) return # set up the crypt! cipher = crypt_cipher(**options) # Sanity achieved; attempt decryption loaded_yaml = lya.AttrDict() with open(yaml_file.encrypted, 'rb') as eyaml: decrypted_yaml = cipher.decrypt(eyaml.read()) try: loaded_conf = yaml.load(decrypted_yaml, Loader=lya.OrderedDictYAMLLoader) except Exception as exc: msg = '{} when loading {}, yaycl crypt key may be incorrect. Original traceback:\n{}' raise YayclCryptError(msg.format(type(exc), yaml_file.encrypted, exc)) loaded_yaml.update(loaded_conf) return loaded_yaml
def configure_db(settings): """Configure database.""" if 'slaves' in settings.db: return pool_size = 50 max_overflow = 49 settings.db['slaves'] = [ lya.AttrDict({ 'dsn': settings.db.master['dsn'], 'pool_size': pool_size, 'max_overflow': max_overflow }) ]
def override(self, options): """Override setting within context. with settings.override(foo='test', bar=42): <new settings here> <old settings here> """ self._load_settings() old_settings = deepcopy(self._settings) self._settings.update_dict(lya.AttrDict(options)) try: yield finally: self._settings = old_settings
def _yaml_load(filename, gitshow): od = None template_module = None if gitshow: default = "vacant: true" try: data = output_cmd('git', GIT_OPTIONS, 'show HEAD:' + filename) if data == '': data = default else: template_module = get_template_module(StringIO(data).readline()) except CmdError: data = default od = yaml.load(data, lya.OrderedDictYAMLLoader) else: with open(os.path.join(WORK_TREE, filename), 'r') as f: od = yaml.load(f, lya.OrderedDictYAMLLoader) f.seek(0) template_module = get_template_module(f.readline()) types = None module = None if template_module: __import__(template_module) module = sys.modules[template_module] types = module.placeholder_types() base = lya.AttrDict(od) flatten = lya.AttrDict.flatten(base) values = [] state_order = [] for l in flatten: try: path = l[0][1] if path not in state_order: state_order.append(path) except: pass path = '' length = len(l[0]) for i in range(length): m = l[0][i] if path == '': path = m else: if i != length-1: path += '.'+m elif len(l[0]) == 2 and type(l[1]) is list: count = 0 for elm in l[1]: if type(elm) is OrderedDict: dic = dict(elm) index = None try: key = INDEXES[m] except: pass if key != None: value = dic[key] index = key + ':' + dumps(value, types) else: index = str(count) for key in dic: pl = path+'.'+m+'['+index+'].'+key+'='+dumps(dic[key], types) values.append(pl) else: pl = path+'.'+m+'['+str(count)+']='+dumps(elm, types) values.append(pl) count += 1 else: path += '.'+m+'='+dumps(l[1], types) values.append(path) if template_module: values = module.fillout(values) return (sorted(values), STATE_ORDER)