galeranotify/galeranotify/configuration.py

64 lines
1.6 KiB
Python
Executable File

#!/usr/bin/python
# -*- coding: utf-8 -*-
# vim: ts=4 sw=4 sts=4 et
#
# galeranotify - configuration backend
#
# Copyright (c) Jan-Jonas Sämann <sprinterfreak@binary-kitchen.de>, 2019
# available under the ISC licence
import sys
import yaml
import socket
import operator
from functools import reduce
class ConfigFactory(dict):
_defaults = {
'hostname': socket.gethostname(),
'smtp': {
'server':'127.0.0.1',
'port': 25,
'ssl': True,
'auth_enable': False,
'username': None,
'password': None
},
'email_from': 'galera@localhost',
'email_to': 'root@localhost'
}
def __init__(self, cf):
try:
with file(cf, 'r') as fh:
prop = yaml.load(fh, Loader=yaml.SafeLoader)
except IOError, e:
sys.stderr.write('Load configuration from {} failed with {}'.format(cf, e))
prop = self._defaults
pass
self._prop = prop
def __getitem__(self, key):
if isinstance(key, tuple):
try:
return reduce(operator.getitem, key, self._prop)
except:
return reduce(operator.getitem, key, self._defaults)
else:
if key in self._prop:
return self._prop[key]
elif key in self._defaults:
return self._defaults[key]
def __setitem__(self, key, value):
raise NotImplementedError('Config modify')
def __iter__(self):
return iter(self._prop)
def __len__(self):
return len(self._prop)
def __str__(self):
return repr(self._prop)