48 lines
1.4 KiB
Python
48 lines
1.4 KiB
Python
from config.parser import ConfigParser
|
|
from config.reloadtrigger import ReloadTrigger
|
|
from models.home import Home
|
|
|
|
|
|
class MaSH:
|
|
"""Max' Smart Home. Smart home automation framework."""
|
|
|
|
config_parser: ConfigParser
|
|
"""Parser for the config file."""
|
|
|
|
config_trigger: list[ReloadTrigger]
|
|
"""Active triggers for reloading the config."""
|
|
|
|
home: Home
|
|
"""Home to control and make smart."""
|
|
|
|
def __init__(self, config_parser: ConfigParser) -> None:
|
|
"""Initialize the framework.
|
|
|
|
Args:
|
|
config_parser (ConfigParser): Parser for the config file.
|
|
"""
|
|
self.config_parser = config_parser
|
|
self.config_trigger = []
|
|
|
|
self.reload_config()
|
|
|
|
def reload_config(self) -> None:
|
|
"""Reload the config."""
|
|
self.home = self.config_parser.get_config() # TODO: Check type
|
|
|
|
def register_config_trigger(self, trigger: ReloadTrigger) -> bool:
|
|
"""Register a trigger for hot-reloading the config.
|
|
|
|
Args:
|
|
trigger (ReloadTrigger): Trigger for hot-reloading the config based on ReloadTrigger.
|
|
|
|
Returns:
|
|
bool: True if the trigger was registered, False if not.
|
|
"""
|
|
if trigger is None or trigger in self.config_trigger:
|
|
return False
|
|
|
|
trigger.on_reload(self.reload_config)
|
|
self.config_trigger.append(trigger)
|
|
|
|
return True
|