21020: Make arvados.api.http_cache get a path from the environment
[arvados.git] / sdk / python / arvados / config.py
index 6f3bd027901181a5e68e79218d383dec4d13c32a..9b2483bcfe972d056f0fb91eb31c169cd8128dd9 100644 (file)
 import os
 import re
 
+from typing import (
+    Callable,
+    Iterable,
+    Union,
+)
+
+from . import util
+
 _settings = None
-if os.environ.get('HOME') is not None:
-    default_config_file = os.environ['HOME'] + '/.config/arvados/settings.conf'
-else:
-    default_config_file = ''
+default_config_file = ''
+""".. WARNING: Deprecated
+   Default configuration initialization now searches for the "default"
+   configuration in several places. This value no longer has any effect.
+"""
 
 KEEP_BLOCK_SIZE = 2**26
 EMPTY_BLOCK_LOCATOR = 'd41d8cd98f00b204e9800998ecf8427e+0'
 
-def initialize(config_file=default_config_file):
+def initialize(
+        config_file: Union[
+            str,
+            os.PathLike,
+            Callable[[str], Iterable[os.PathLike]],
+        ]=util._BaseDirectories('CONFIG').search,
+) -> None:
     global _settings
     _settings = {}
 
+    if callable(config_file):
+        search_paths = iter(config_file('settings.conf'))
+        config_file = next(search_paths, '')
+
     # load the specified config file if available
     try:
         _settings = load(config_file)