Files
heating-controller/src/config.py
Wolfgang Hottgenroth f0b4017166
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
refactored
2024-11-18 14:17:31 +01:00

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)