Module onionr.config
Onionr - Private P2P Communication
This file deals with configuration management.
Source code
'''
Onionr - Private P2P Communication
This file deals with configuration management.
'''
'''
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/>.
'''
import os, json, logger
import filepaths
_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 not last 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
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)
Functions
def check()
-
Checks if the configuration file exists, creates it if not
Source code
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 get(key, default=None, save=False)
-
Gets the key from configuration, or returns
default
Source code
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 not last in data: if save: set(key, default, savefile = True) return default return data[last]
def get_config()
-
Gets the entire configuration as an array
Source code
def get_config(): ''' Gets the entire configuration as an array ''' return _config
def get_config_file()
-
Returns the absolute path to the configuration file
Source code
def get_config_file(): ''' Returns the absolute path to the configuration file ''' return _configfile
def is_set(key)
-
Source code
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 reload()
-
Reloads the configuration data in memory from the file
Source code
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
def save()
-
Saves the configuration data to the configuration file
Source code
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 set(key, value=None, savefile=False)
-
Sets the key in configuration to
value
Source code
def set(key, value = None, savefile = False): ''' Sets the key in configuration to `value` ''' global _config 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
Source code
def 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
Source code
def set_config_file(configfile): ''' Sets the path to the configuration file ''' global _configfile _configfile = os.abs.abspath(configfile)