Source code for stdlibx.config.loaders.env

 1from __future__ import annotations
 2
 3import os
 4from typing import Any, Mapping
 5
 6
[docs] 7class EnvLoader: 8 def __init__( 9 self, 10 environ: Mapping[str, str] | None = None, 11 env_prefix: str = "STDLIBX_", 12 env_nested_delimiter: str = "__", 13 ) -> None: 14 self.__environ = environ 15 self.__env_prefix = env_prefix 16 self.__env_nested_delimiter = env_nested_delimiter 17
[docs] 18 def load(self) -> Mapping[str, Any]: 19 _environ = self.__environ or os.environ 20 21 _ret = {} 22 for key, value in ( 23 (key.upper().strip(self.__env_prefix + "_").lower(), value) 24 for key, value in _environ.items() 25 if key.upper().startswith(self.__env_prefix) 26 ): 27 if self.__env_nested_delimiter not in key: 28 _ret[key] = value 29 else: 30 keys = key.split(self.__env_nested_delimiter) 31 32 _value = _ret 33 for _key in keys[:-1]: 34 if _key not in _value: 35 _value[_key] = {} 36 _value = _value[_key] 37 _value[keys[-1]] = value 38 39 return _ret