Source code for concrete_settings.contrib.sources.envvar_source

import os
from typing import Any, Tuple, Optional, Union, Type

from concrete_settings.sources import (
    Source,
    StringSourceMixin,
    AnySource,
    register_source,
    NotFound)


[docs]@register_source class EnvVarSource(StringSourceMixin, Source): def __init__(self): self.data = os.environ @staticmethod def get_source(src: AnySource) -> Optional['EnvVarSource']: if isinstance(src, EnvVarSource): return src else: return None def read(self, setting, parents: Tuple[str, ...] = ()) -> Union[Type[NotFound], Any]: parents_upper = map(str.upper, parents) key = '_'.join((*parents_upper, setting.name)) val = os.environ.get(key) if val is None: return NotFound else: return self.convert_value(val, setting.type_hint)