from pathlib import Path from lxml import etree from functools import cached_property from arguments import ArgumentsParser from typing import NamedTuple class TriggerTuple(NamedTuple): name: str class Config: def __init__(self, basepath: Path) -> None: self.basepath = basepath self.config = ArgumentsParser().parser.config @cached_property def root(self) -> etree.ElementTree: return etree.parse(self.basepath / self.config) @cached_property def app_root(self) -> etree.Element: return self.root.xpath('/cpuGovernorAutoAdjust').pop() @cached_property def loglevel(self) -> str: return self.app_root.xpath('logLevel').pop().text @cached_property def testmode(self) -> bool: value = self.app_root.xpath('testMode').pop().text.lower() if value not in ['true', 'false']: raise ValueError("testMode can only be 'true' or 'false") return True if value == 'true' else False @cached_property def triggertuples(self) -> list[TriggerTuple]: ret_val = [] _triggers = self.app_root.xpath('triggers/trigger') for trigger in _triggers: name = trigger.xpath('name').pop().text ret_val.append(TriggerTuple(name=name)) return ret_val