39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
import os
|
|
import tomllib
|
|
from collections import UserDict
|
|
from pathlib import Path
|
|
|
|
|
|
NODEAGENT_CONFIG_FILE = os.getenv('NODEAGENT_CONFIG_FILE')
|
|
NODEAGENT_DEFAULT_CONFIG_FILE = '/etc/node-agent/config.toml'
|
|
|
|
|
|
class ConfigLoaderError(Exception):
|
|
"""Bad config file syntax, unreachable file or bad config schema."""
|
|
|
|
|
|
class ConfigLoader(UserDict):
|
|
|
|
def __init__(self, file: Path | None = None):
|
|
if file is None:
|
|
file = NODEAGENT_CONFIG_FILE or NODEAGENT_DEFAULT_CONFIG_FILE
|
|
self.file = Path(file)
|
|
super().__init__(self._load())
|
|
# todo: load deafult configuration
|
|
|
|
def _load(self):
|
|
try:
|
|
with open(self.file, 'rb') as config:
|
|
return tomllib.load(config)
|
|
# todo: config schema validation
|
|
except tomllib.TOMLDecodeError as tomlerr:
|
|
raise ConfigLoaderError(
|
|
f'Bad TOML syntax in config file: {self.file}: {tomlerr}'
|
|
) from tomlerr
|
|
except (OSError, ValueError) as readerr:
|
|
raise ConfigLoaderError(
|
|
f'Cannot read config file: {self.file}: {readerr}') from readerr
|
|
|
|
def reload(self):
|
|
self.data = self._load()
|