22126: Improve formatting of method parameter docstrings
[arvados.git] / sdk / python / arvados / config.py
1 # Copyright (C) The Arvados Authors. All rights reserved.
2 #
3 # SPDX-License-Identifier: Apache-2.0
4
5 # config.py - configuration settings and global variables for Arvados clients
6 #
7 # Arvados configuration settings are taken from $HOME/.config/arvados.
8 # Environment variables override settings in the config file.
9
10 import os
11 import re
12
13 from typing import (
14     Callable,
15     Iterable,
16     Union,
17 )
18
19 from . import util
20 from ._internal import basedirs
21
22 _settings = None
23 default_config_file = ''
24 """
25 .. WARNING:: Deprecated
26    Default configuration initialization now searches for the "default"
27    configuration in several places. This value no longer has any effect.
28 """
29
30 KEEP_BLOCK_SIZE = 2**26
31 EMPTY_BLOCK_LOCATOR = 'd41d8cd98f00b204e9800998ecf8427e+0'
32
33 def initialize(
34         config_file: Union[
35             str,
36             os.PathLike,
37             Callable[[str], Iterable[os.PathLike]],
38         ]=basedirs.BaseDirectories('CONFIG').search,
39 ) -> None:
40     global _settings
41     _settings = {}
42
43     if callable(config_file):
44         search_paths = iter(config_file('settings.conf'))
45         config_file = next(search_paths, '')
46
47     # load the specified config file if available
48     try:
49         _settings = load(config_file)
50     except IOError:
51         pass
52
53     # override any settings with environment vars
54     for var in os.environ:
55         if var.startswith('ARVADOS_'):
56             _settings[var] = os.environ[var]
57
58 def load(config_file):
59     cfg = {}
60     with open(config_file, "r") as f:
61         for config_line in f:
62             if re.match(r'^\s*(?:#|$)', config_line):
63                 continue
64             var, val = config_line.rstrip().split('=', 2)
65             cfg[var] = val
66     return cfg
67
68 def flag_is_true(key, d=None):
69     if d is None:
70         d = settings()
71     return d.get(key, '').lower() in set(['1', 't', 'true', 'y', 'yes'])
72
73 def get(key, default_val=None):
74     return settings().get(key, default_val)
75
76 def settings():
77     if _settings is None:
78         initialize()
79     return _settings