Source code for cfglib.sources.env

import os

from ..config import ConfigProjection, ProjectedConfig, ProxyConfig


# pylint: disable=too-many-ancestors
[docs]class EnvConfig(ProjectedConfig): """A config that takes its contents from the environment.""" def __init__(self, prefix: str = '', lowercase: bool = False): projection = EnvConfigProjection(prefix, lowercase) super().__init__(ProxyConfig(os.environ), projection)
[docs]class EnvConfigProjection(ConfigProjection): """A commonly used projection for env variables: remove prefix and optionally lowercase keys.""" def __init__(self, prefix: str, lowercase: bool = False): self.prefix = prefix self.lowercase = lowercase
[docs] def is_relevant_key(self, key: str) -> bool: if self.lowercase and not key.islower(): return False return True
[docs] def is_relevant_sourcekey(self, sourcekey: str) -> bool: if self.lowercase and not sourcekey.isupper(): return False return sourcekey.startswith(self.prefix)
[docs] def key_to_sourcekey(self, key: str) -> str: if self.lowercase: key = key.upper() return self.prefix + key
[docs] def sourcekey_to_key(self, sourcekey: str) -> str: assert sourcekey.startswith(self.prefix) key = sourcekey[len(self.prefix):] if self.lowercase: key = key.lower() return key