diff --git a/config.py b/config.py index defcb35..eaa0437 100644 --- a/config.py +++ b/config.py @@ -3,12 +3,16 @@ from pathlib import Path from lxml import etree from functools import cached_property from arguments import ArgumentsParser -from typing import NamedTuple +from typing import NamedTuple, Optional class TriggerTuple(NamedTuple): name: str interval_in_seconds: int + + +class MissingConfig(Exception): + pass class Config: @@ -57,3 +61,7 @@ class Config: ) return ret_val + + def get_trigger_by_name(self, name: str) -> Optional[TriggerTuple]: + _all_trigger_tuples = self.triggertuples.copy() + return next((t for t in _all_trigger_tuples if t.name == name), None) diff --git a/trigger.py b/trigger.py index e83b204..1cd2bec 100644 --- a/trigger.py +++ b/trigger.py @@ -1,9 +1,18 @@ from logger import getLogger -from config import Config +from config import Config, TriggerTuple, MissingConfig class Trigger: - def __init__(self, name: str, config: Config) -> None: + def __init__(self, name: str, _config: Config) -> None: self.name = name - self.log = getLogger('trigger', loglevel=config.loglevel.upper()) + self._config = _config + self.log = getLogger('trigger', loglevel=_config.loglevel.upper()) self.log.info(f'initializing {self.__class__.__name__}') + + @property + def config(self) -> TriggerTuple: + _config = self._config.get_trigger_by_name(self.name) + if _config is None: + raise MissingConfig(f"Trigger {self.name} hasn't been properly configures") + return _config + \ No newline at end of file diff --git a/triggers/roon.py b/triggers/roon.py index b8fed26..fb3c948 100644 --- a/triggers/roon.py +++ b/triggers/roon.py @@ -2,6 +2,6 @@ from trigger import Trigger from config import Config class RoonTrigger(Trigger): - def __init__(self, name: str, config: Config) -> None: - super().__init__(name, config) + def __init__(self, name: str, _config: Config) -> None: + super().__init__(name, _config) \ No newline at end of file