def __init__(self, raw_config_obj=None, config_filename='<programmatically configured>', overrides=None): """If `raw_config_obj` is None, the default peyotl cascade for finding a configuration file will be used. overrides is a 2-level dictionary of section/param entries that will be used instead of the setting. The two default dicts will be used if the setting is not in overrides or the config object. "dominant" and "fallback" refer to whether the rank higher or lower than the default value in a get.*setting.*() call """ # noinspection PyProtectedMember from peyotl.utility.get_logger import _logging_env_conf_overrides self._config_filename = config_filename self._raw = raw_config_obj if overrides is None: overrides = {} leco = _logging_env_conf_overrides() if leco: for k, v in leco['logging'].items(): if k in overrides.setdefault('logging', {}): # noinspection PyProtectedMember from peyotl.utility.get_logger import warn_from_util_logger m = 'Override keys ["logging"]["{}"] was overruled by an environmental variable'.format( k) warn_from_util_logger(m) overrides['logging'][k] = v self._override = overrides
def __init__(self, raw_config_obj=None, config_filename='<programmatically configured>', overrides=None): """If `raw_config_obj` is None, the default peyotl cascade for finding a configuration file will be used. overrides is a 2-level dictionary of section/param entries that will be used instead of the setting. The two default dicts will be used if the setting is not in overrides or the config object. "dominant" and "fallback" refer to whether the rank higher or lower than the default value in a get.*setting.*() call """ # noinspection PyProtectedMember from peyotl.utility.get_logger import _logging_env_conf_overrides self._config_filename = config_filename self._raw = raw_config_obj if overrides is None: overrides = {} leco = _logging_env_conf_overrides() if leco: for k, v in leco['logging'].items(): if k in overrides.setdefault('logging', {}): # noinspection PyProtectedMember from peyotl.utility.get_logger import warn_from_util_logger m = 'Override keys ["logging"]["{}"] was overruled by an environmental variable'.format(k) warn_from_util_logger(m) overrides['logging'][k] = v self._override = overrides
def report(self, out): # noinspection PyProtectedMember from peyotl.utility.get_logger import _logging_env_conf_overrides cfn = self.config_filename out.write('# Config read from "{f}"\n'.format(f=cfn)) cfenv = os.environ.get('PEYOTL_CONFIG_FILE', '') if cfenv: if os.path.abspath(cfenv) == cfn: emsg = '# config filepath obtained from $PEYOTL_CONFIG_FILE env var.\n' else: emsg = '# using packaged default. The filepath from PEYOTL_CONFIG_FILE env. var. did not exist.\n' else: cfhome = os.path.expanduser("~/.peyotl/config") if os.path.abspath(cfhome) == cfn: emsg = "# config filepath obtained via ~/.peyotl/config convention.\n" else: emsg = '# using packaged default. PEYOTL_CONFIG_FILE was not set and ~/.peyotl/config was not found.\n' out.write(emsg) from_raw = _create_overrides_from_config(self._raw) k = set(self._override.keys()) k.update(from_raw.keys()) k = list(k) k.sort() env_log_warnings = [] leco = _logging_env_conf_overrides(log_init_warnings=env_log_warnings) for w in env_log_warnings: out.write('# Log config warning: {}\n'.format(w)) lecologging = leco.get('logging', {}) for key in k: ov_set = self._override.get(key, {}) fr_set = from_raw.get(key, {}) v = set(ov_set.keys()) v.update(fr_set.keys()) v = list(v) v.sort() out.write('[{s}]\n'.format(s=key)) for param in v: if param in ov_set: if key == 'logging' and param in lecologging: out.write( '# {p} from env. variable\n{p} = {s}\n'.format( p=param, s=str(ov_set[param]))) else: out.write('# {p} from override\n{p} = {s}\n'.format( p=param, s=str(ov_set[param]))) else: out.write('# {p} from {f}\n{p} = {s}\n'.format( p=param, s=str(fr_set[param]), f=self._config_filename))
def report(self, out): # noinspection PyProtectedMember from peyotl.utility.get_logger import _logging_env_conf_overrides cfn = self.config_filename out.write('# Config read from "{f}"\n'.format(f=cfn)) cfenv = os.environ.get('PEYOTL_CONFIG_FILE', '') if cfenv: if os.path.abspath(cfenv) == cfn: emsg = '# config filepath obtained from $PEYOTL_CONFIG_FILE env var.\n' else: emsg = '# using packaged default. The filepath from PEYOTL_CONFIG_FILE env. var. did not exist.\n' else: cfhome = os.path.expanduser("~/.peyotl/config") if os.path.abspath(cfhome) == cfn: emsg = "# config filepath obtained via ~/.peyotl/config convention.\n" else: emsg = '# using packaged default. PEYOTL_CONFIG_FILE was not set and ~/.peyotl/config was not found.\n' out.write(emsg) from_raw = _create_overrides_from_config(self._raw) k = set(self._override.keys()) k.update(from_raw.keys()) k = list(k) k.sort() env_log_warnings = [] leco = _logging_env_conf_overrides(log_init_warnings=env_log_warnings) for w in env_log_warnings: out.write('# Log config warning: {}\n'.format(w)) lecologging = leco.get('logging', {}) for key in k: ov_set = self._override.get(key, {}) fr_set = from_raw.get(key, {}) v = set(ov_set.keys()) v.update(fr_set.keys()) v = list(v) v.sort() out.write('[{s}]\n'.format(s=key)) for param in v: if param in ov_set: if key == 'logging' and param in lecologging: out.write('# {p} from env. variable\n{p} = {s}\n'.format(p=param, s=str(ov_set[param]))) else: out.write('# {p} from override\n{p} = {s}\n'.format(p=param, s=str(ov_set[param]))) else: out.write('# {p} from {f}\n{p} = {s}\n'.format(p=param, s=str(fr_set[param]), f=self._config_filename))