lib: Implement save and load functions for settings

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2021-06-07 10:39:08 -04:00
parent e119a6cf19
commit 76338da8fe
2 changed files with 35 additions and 0 deletions

View File

@ -1,7 +1,9 @@
# Copyright 2021 (c) Anna Schumaker.
from. import data
import configparser
import threading
config_file = "settings.cfg"
config = configparser.ConfigParser()
lock = threading.Lock()
@ -37,6 +39,14 @@ def set(setting, 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 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()

View File

@ -1,21 +1,28 @@
# Copyright 2021 (c) Anna Schumaker.
from . import data
from . import settings
import configparser
import threading
import unittest
class TestSettings(unittest.TestCase):
def setUp(self):
self.cfg_file = data.DataFile(settings.config_file, data.READ_TEXT)
def tearDown(self):
settings.reset()
def test_init(self):
self.assertEqual(settings.config_file, "settings.cfg")
self.assertIsInstance(settings.config, configparser.ConfigParser)
self.assertIsInstance(settings.lock, type(threading.Lock()))
def test_set_get(self):
self.assertIsNone(settings.get("test.key"))
self.assertFalse(self.cfg_file.exists())
settings.set("test.key", 42)
self.assertTrue(self.cfg_file.exists())
self.assertEqual(settings.get("test.key"), "42")
self.assertIsNone(settings.get("test.nokey"))
self.assertEqual(settings.get("test.nokey", 1), 1)
@ -28,7 +35,25 @@ class TestSettings(unittest.TestCase):
settings.set("test.bool", True)
self.assertTrue(settings.get_bool("test.bool"))
def test_load(self):
settings.load()
settings.set("test.key1", 1)
settings.set("test.key2", 2)
settings.set("test.key3", True)
settings.set("test.key4", 4.2)
settings.config.clear()
settings.load()
self.assertEqual(settings.get_int("test.key1"), 1)
self.assertEqual(settings.get_int("test.key2"), 2)
self.assertEqual(settings.get_bool("test.key3"), True)
self.assertEqual(settings.get_float("test.key4"), 4.2)
def test_reset(self):
settings.set("test.key", 42)
self.assertTrue(self.cfg_file.exists())
settings.reset()
self.assertIsNone(settings.get("test.key"))
self.assertFalse(self.cfg_file.exists())