49 lines
1.1 KiB
Python
49 lines
1.1 KiB
Python
|
|
"""
|
||
|
|
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
|
||
|
|
TODO: manage persistent state in configobj
|
||
|
|
"""
|
||
|
|
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')
|
||
|
|
|
||
|
|
validator = Validator()
|
||
|
|
result = __config_store.validate(validator)
|
||
|
|
|
||
|
|
if not result:
|
||
|
|
print('Config file validation failed!')
|
||
|
|
sys.exit(1)
|
||
|
|
else:
|
||
|
|
__initialized = True
|
||
|
|
__config_store.write()
|
||
|
|
|
||
|
|
|
||
|
|
def 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
|
||
|
|
|
||
|
|
|
||
|
|
def set(key, val):
|
||
|
|
__config_store[key] = val
|
||
|
|
__config_store.write()
|
||
|
|
return None
|