tubearchivist/tubearchivist/home/src/config.py

61 lines
1.9 KiB
Python

"""
Functionality:
- read and write config
- load config variables into redis
- needs to be a separate module to avoid circular import
"""
import json
import os
from home.src.helper import get_message, set_message
class AppConfig:
""" handle user settings and application variables """
def __init__(self):
self.config = self.get_config()
def get_config(self):
""" get config from default file or redis if changed """
config = self.get_config_redis()
if not config:
with open('home/config.json', 'r', encoding="utf-8") as f:
config_str = f.read()
config = json.loads(config_str)
config['application']['REDIS_HOST'] = os.environ.get('REDIS_HOST')
config['application']['es_url'] = os.environ.get('ES_URL')
config['application']['HOST_UID'] = int(os.environ.get('HOST_UID'))
config['application']['HOST_GID'] = int(os.environ.get('HOST_GID'))
return config
@staticmethod
def get_config_redis():
""" read config json set from redis to overwrite defaults """
config = get_message('config')
if not list(config.values())[0]:
return False
return config
def update_config(self, form_post):
""" update config values from settings form """
config = self.config
for key, value in form_post.items():
to_write = value[0]
if len(to_write):
if to_write == '0':
to_write = False
elif to_write.isdigit():
to_write = int(to_write)
config_dict, config_value = key.split('.')
config[config_dict][config_value] = to_write
with open('home/config.json', 'w', encoding="utf-8") as f:
f.write(json.dumps(config))
set_message('config', config, expire=False)