from dataclasses import dataclass from os import environ @dataclass class EnvVar: """ Environment Variable fetcher for use in dataclass ``field(default_factory=...)`` >>> @dataclass >>> class SomeDataclass: ... field_name: str = field(default_factory=EnvVar("SOME_VAR_NAME", "err msg")) """ var_name: str err_msg: str = "" def __call__(self) -> str: try: return environ[self.var_name] except KeyError as e: e.add_note(self.err_msg) raise