emmental/lib/settings.py

61 lines
1.7 KiB
Python

# Copyright 2021 (c) Anna Schumaker.
from. import data
import configparser
import threading
config_file = "settings.cfg"
config = configparser.ConfigParser()
lock = threading.Lock()
class Prepare:
def __init__(self, setting):
self.setting = setting
def __enter__(self):
lock.acquire()
return self.setting.split(".")
def __exit__(self, exp_type, exp_value, traceback):
lock.release()
return exp_type == None
def get(setting, default=None):
with Prepare(setting) as (section, key):
return config.get(section, key, fallback=default)
def get_int(setting, default=None):
with Prepare(setting) as (section, key):
return config.getint(section, key, fallback=default)
def get_float(setting, default=None):
with Prepare(setting) as (section, key):
return config.getfloat(section, key, fallback=default)
def get_bool(setting, default=False):
with Prepare(setting) as (section, key):
return config.getboolean(section, key, fallback=default)
def __do_set(section, key, value):
if not config.has_section(section):
config.add_section(section)
config.set(section, key, str(value))
with data.DataFile(config_file, data.WRITE_TEXT) as f:
config.write(f.file)
def set(setting, value):
with Prepare(setting) as (section, key):
__do_set(section, key, value)
def initialize(setting, value):
with Prepare(setting) as (section, key):
if not config.has_option(section, key):
__do_set(section, key, value)
def load():
with data.DataFile(config_file, data.READ_TEXT) as f:
if f.exists():
config.read_file(f.file)
def reset():
config.clear()
data.DataFile(config_file, data.WRITE_TEXT).remove()