Module src.config
Onionr - Private P2P Communication.
This file deals with configuration management.
Expand source code
"""Onionr - Private P2P Communication.
This file deals with configuration management.
"""
import os, json, logger
import filepaths
from . import onboarding
"""
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
"""
_configfile = filepaths.config_file
_config = {}
def get(key, default = None, save = False):
    """Gets the key from configuration, or returns `default`"""
    key = str(key).split('.')
    data = _config
    last = key.pop()
    for item in key:
        if (not item in data) or (not type(data[item]) == dict):
            return default
        data = data[item]
    if last not in data:
        if save:
            set(key, default, savefile = True)
        return default
    return data[last]
def set(key, value = None, savefile = False):
    """Sets the key in configuration to `value`"""
    global _config
    whole_key = key
    key = str(key).split('.')
    data = _config
    last = key.pop()
    for item in key:
        if (not item in data) or (not type(data[item]) == dict):
            data[item] = dict()
        data = data[item]
    if value is None:
        del data[last]
    else:
        data[last] = value
    if savefile:
        save()
def is_set(key):
    key = str(key).split('.')
    data = _config
    last = key.pop()
    for item in key:
        if (not item in data) or (not type(data[item]) == dict):
            return False
        data = data[item]
    if not last in data:
        return False
    return True
def check():
    """Checks if the configuration file exists, creates it if not"""
    if not os.path.exists(os.path.dirname(get_config_file())):
        os.makedirs(os.path.dirname(get_config_file()))
def save():
    """Saves the configuration data to the configuration file"""
    check()
    try:
        with open(get_config_file(), 'w', encoding="utf8") as configfile:
            json.dump(get_config(), configfile, indent=2)
    except json.JSONDecodeError:
        logger.warn('Failed to write to configuration file.')
def reload():
    """Reloads the configuration data in memory from the file"""
    check()
    try:
        with open(get_config_file(), 'r', encoding="utf8") as configfile:
            set_config(json.loads(configfile.read()))
    except (FileNotFoundError, json.JSONDecodeError) as e:
        pass
        #logger.debug('Failed to parse configuration file.')
def get_config():
    """Gets the entire configuration as an array"""
    return _config
def set_config(config):
    """Sets the configuration to the array in arguments"""
    global _config
    _config = config
def get_config_file():
    """Returns the absolute path to the configuration file"""
    return _configfile
def set_config_file(configfile):
    """Sets the path to the configuration file."""
    global _configfile
    _configfile = os.abs.abspath(configfile)Sub-modules
- src.config.onboarding
- 
Onionr - Private P2P Communication … 
Functions
- def check()
- 
Checks if the configuration file exists, creates it if not Expand source codedef check(): """Checks if the configuration file exists, creates it if not""" if not os.path.exists(os.path.dirname(get_config_file())): os.makedirs(os.path.dirname(get_config_file()))
- def get(key, default=None, save=False)
- 
Gets the key from configuration, or returns defaultExpand source codedef get(key, default = None, save = False): """Gets the key from configuration, or returns `default`""" key = str(key).split('.') data = _config last = key.pop() for item in key: if (not item in data) or (not type(data[item]) == dict): return default data = data[item] if last not in data: if save: set(key, default, savefile = True) return default return data[last]
- def get_config()
- 
Gets the entire configuration as an array Expand source codedef get_config(): """Gets the entire configuration as an array""" return _config
- def get_config_file()
- 
Returns the absolute path to the configuration file Expand source codedef get_config_file(): """Returns the absolute path to the configuration file""" return _configfile
- def is_set(key)
- 
Expand source codedef is_set(key): key = str(key).split('.') data = _config last = key.pop() for item in key: if (not item in data) or (not type(data[item]) == dict): return False data = data[item] if not last in data: return False return True
- def reload()
- 
Reloads the configuration data in memory from the file Expand source codedef reload(): """Reloads the configuration data in memory from the file""" check() try: with open(get_config_file(), 'r', encoding="utf8") as configfile: set_config(json.loads(configfile.read())) except (FileNotFoundError, json.JSONDecodeError) as e: pass
- def save()
- 
Saves the configuration data to the configuration file Expand source codedef save(): """Saves the configuration data to the configuration file""" check() try: with open(get_config_file(), 'w', encoding="utf8") as configfile: json.dump(get_config(), configfile, indent=2) except json.JSONDecodeError: logger.warn('Failed to write to configuration file.')
- def set(key, value=None, savefile=False)
- 
Sets the key in configuration to valueExpand source codedef set(key, value = None, savefile = False): """Sets the key in configuration to `value`""" global _config whole_key = key key = str(key).split('.') data = _config last = key.pop() for item in key: if (not item in data) or (not type(data[item]) == dict): data[item] = dict() data = data[item] if value is None: del data[last] else: data[last] = value if savefile: save()
- def set_config(config)
- 
Sets the configuration to the array in arguments Expand source codedef set_config(config): """Sets the configuration to the array in arguments""" global _config _config = config
- def set_config_file(configfile)
- 
Sets the path to the configuration file. Expand source codedef set_config_file(configfile): """Sets the path to the configuration file.""" global _configfile _configfile = os.abs.abspath(configfile)