# 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()