Files
urlbot-native/config.py

85 lines
2.0 KiB
Python
Raw Normal View History

"""
Interface to access:
- local configuration
- shared configuration
- shared runtime state
All configuration is stored in a single ini-file and
persistent state is pickle-dumped into a binary file.
TODO: check lock safety
"""
import json
import logging
import sys
from configobj import ConfigObj
from validate import Validator
__initialized = False
__config_store = ConfigObj('local_config.ini', configspec='local_config.ini.spec')
2015-12-20 15:24:42 +01:00
runtime_config_store = ConfigObj('persistent_config.ini', configspec='persistent_config.ini.spec')
validator = Validator()
result = __config_store.validate(validator)
2015-12-20 15:24:42 +01:00
runtime_config_store.validate(validator)
if not result:
print('Config file validation failed!')
sys.exit(1)
else:
__initialized = True
__config_store.write()
2015-12-20 15:24:42 +01:00
def conf_get(key):
if not __initialized:
raise RuntimeError("not __initialized")
try:
return __config_store[key]
except KeyError as e:
logger = logging.getLogger(__name__)
logger.warn('conf(): unknown key ' + str(key))
print(json.dumps(__config_store, indent=2))
raise
2015-12-20 15:24:42 +01:00
def conf_set(key, val):
__config_store[key] = val
__config_store.write()
return None
2015-12-20 15:24:42 +01:00
def runtimeconf_set(key, value):
runtime_config_store[key] = value
runtimeconf_persist()
2015-12-20 15:24:42 +01:00
def runtimeconf_get(key, default=None):
if key is None:
return runtime_config_store
else:
return runtime_config_store.get(key, default=default)
def runtimeconf_persist():
runtime_config_store.write()
2015-12-20 15:24:42 +01:00
def runtimeconf_deepget(key, default=None):
2015-12-21 10:46:17 +01:00
"""
access a nested key with get("plugins.moin.enabled")
:param key: string of nested properties joined with dots
:param default: default key if None found
:return:
"""
2015-12-20 15:24:42 +01:00
if '.' not in key:
return runtimeconf_get(key, default)
else:
path = key.split('.')
value = runtimeconf_get(path.pop(0))
for p in path:
2015-12-21 10:46:17 +01:00
value = value.get(p, default)
2015-12-20 15:24:42 +01:00
if value is None:
2015-12-21 10:46:17 +01:00
break
2015-12-20 15:24:42 +01:00
return value