1
0
mirror of http://aero2k.de/t/repos/urlbot-native.git synced 2017-09-06 15:25:38 +02:00
Files
urlbot-native-trex/config.py

91 lines
2.4 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 os
import sys
from fasteners import interprocess_locked
from configobj import ConfigObj
from validate import Validator
CONFIG_SUFFIX = os.environ.get('BOTSUFFIX', '')
__initialized = False
__config_store = ConfigObj('local_config{}.ini'.format(CONFIG_SUFFIX), configspec='local_config.ini.spec')
runtime_config_store = ConfigObj('persistent_config.ini'.format(CONFIG_SUFFIX), configspec='persistent_config.ini.spec')
result = __config_store.validate(Validator())
# copy is essential to store values with a default.. see configobj.py:2053
assert runtime_config_store.validate(Validator(), copy=True)
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)
@interprocess_locked(runtime_config_store.filename)
def runtimeconf_persist():
# logging.getLogger(__name__).debug(json.dumps(runtime_config_store, indent=2))
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