33 lines
867 B
Python
33 lines
867 B
Python
from __future__ import annotations
|
|
from dataclasses import dataclass
|
|
from os import environ
|
|
from typing import TypeAlias
|
|
|
|
|
|
JSONDataScalar: TypeAlias = str | None | float | bool
|
|
JSONDataList: TypeAlias = list["JSONDataScalar | JSONDataMap | JSONDataList"]
|
|
JSONDataMap: TypeAlias = dict[str, "JSONDataScalar | JSONDataList | JSONDataMap"]
|
|
JSONData: TypeAlias = "JSONDataMap | JSONDataList"
|
|
|
|
|
|
@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
|