25 lines
536 B
Python
25 lines
536 B
Python
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
|