Merge branch 'master' into 3699-arv-copy
[arvados.git] / sdk / python / arvados / config.py
1 # config.py - configuration settings and global variables for Arvados clients
2 #
3 # Arvados configuration settings are taken from $HOME/.config/arvados.
4 # Environment variables override settings in the config file.
5
6 import os
7 import re
8
9 _settings = None
10 default_config_file = os.environ['HOME'] + '/.config/arvados/settings.conf'
11
12 EMPTY_BLOCK_LOCATOR = 'd41d8cd98f00b204e9800998ecf8427e+0'
13
14 def initialize(config_file=default_config_file):
15     global _settings
16     _settings = {}
17
18     # load the specified config file if available
19     try:
20         _settings = load(config_file)
21     except IOError:
22         pass
23
24     # override any settings with environment vars
25     for var in os.environ:
26         if var.startswith('ARVADOS_'):
27             _settings[var] = os.environ[var]
28
29 def load(config_file):
30     cfg = {}
31     with open(config_file, "r") as f:
32         for config_line in f:
33             if re.match('^\s*$', config_line):
34                 continue
35             if re.match('^\s*#', config_line):
36                 continue
37             var, val = config_line.rstrip().split('=', 2)
38             cfg[var] = val
39     return cfg
40
41 def flag_is_true(key):
42     return get(key, '').lower() in set(['1', 't', 'true', 'y', 'yes'])
43
44 def get(key, default_val=None):
45     return settings().get(key, default_val)
46
47 def settings():
48     if _settings is None:
49         initialize()
50     return _settings