This commit is contained in:
46
src/config.py
Normal file
46
src/config.py
Normal file
@ -0,0 +1,46 @@
|
||||
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)
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user