47 lines
1.1 KiB
Python
47 lines
1.1 KiB
Python
import os
|
|
import json
|
|
from dataclasses import dataclass, fields
|
|
from typing import Any
|
|
|
|
class ConfigException (Exception): pass
|
|
|
|
def default_env_loader(var_name, default_value=None):
|
|
v = os.getenv(var_name, default_value)
|
|
if not v:
|
|
raise ConfigException(var_name)
|
|
return v
|
|
|
|
def json_env_loader(var_name):
|
|
v = default_env_loader(var_name)
|
|
vv = json.loads(v)
|
|
return vv
|
|
|
|
@dataclass(init=False, frozen=False)
|
|
class Config:
|
|
MQTT_BROKER : str
|
|
MQTT_PORT : int
|
|
MQTT_CLIENT_PREFIX : str
|
|
BOXES : dict
|
|
BOX_TOPIC_PREFIXES : dict
|
|
CENTRAL_TOPICS : dict
|
|
OFF_TEMPERATURE : str
|
|
LOW_TEMPERATURE : str
|
|
MAINTENANCE_TEMPERATURE : str
|
|
DEFAULT_HIGH_TEMPERATURE : str
|
|
STATUS_TOPIC : str
|
|
CONTEXT_TOPIC_PREFIX : str
|
|
|
|
def __init__(self):
|
|
for f in fields(self):
|
|
v = os.getenv(f.name)
|
|
if not v:
|
|
raise ConfigException(f.name)
|
|
if f.type == int:
|
|
v = int(v)
|
|
elif f.type == dict:
|
|
v = json.loads(v)
|
|
setattr(self, f.name, v)
|
|
|
|
|
|
|