Thu, 18 Jan 2018 21:42:00 +0000
Some rough drafting
0 | 1 | # |
2 | # Borgend configuration loader | |
3 | # | |
4 | ||
5 | import yaml | |
6 | import io | |
7 | import os | |
8 | import xdg | |
9 | import string | |
10 | ||
11 | ||
12 | def expand_env(cfg, env): | |
13 | if isinstance(cfg, dict): | |
14 | out={key: expand_env(val, env) for key, val in cfg.items()} | |
15 | elif isinstance(cfg, list): | |
16 | out=[expand_env(val, env) for val in cfg] | |
17 | elif isinstance(cfg, str): | |
18 | out=string.Template(cfg).substitute(os.environ) | |
19 | else: | |
20 | out=cfg | |
21 | ||
22 | return out | |
23 | ||
24 | cfgfile=os.path.join(xdg.XDG_CONFIG_HOME, "borgend", "config.yaml") | |
25 | ||
26 | if not (os.path.exists(cfgfile) and os.path.isfile(cfgfile)): | |
27 | raise SystemExit(f'Configuration file required: {cfgfile}') | |
28 | ||
29 | with io.open(cfgfile, 'r') as file: | |
30 | settings=expand_env(yaml.load(file), os.environ); |