61 lines
1.7 KiB
Python
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()
|