44 lines
1.3 KiB
Python
44 lines
1.3 KiB
Python
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
|