fix(config): make config file keys case sensitive

Since the configparser library by default parses keys case insensitive
(all lowercase), certain mappings, especially in the pulseaudio modules,
could fail ("internal" pulseaudio device names are matched against
entries in the configuration).

fixes #992
This commit is contained in:
tobi-wan-kenobi 2023-09-15 15:06:57 +02:00
parent 8583b5123e
commit b42323013d
2 changed files with 14 additions and 3 deletions

View file

@ -240,11 +240,16 @@ class Config(util.store.Store):
:param filename: path to the file to load :param filename: path to the file to load
""" """
def load_config(self, filename): def load_config(self, filename, content=None):
if os.path.exists(filename): if os.path.exists(filename) or content != None:
log.info("loading {}".format(filename)) log.info("loading {}".format(filename))
tmp = RawConfigParser() tmp = RawConfigParser()
tmp.read(u"{}".format(filename)) tmp.optionxform = str
if content:
tmp.read_string(content)
else:
tmp.read(u"{}".format(filename))
if tmp.has_section("module-parameters"): if tmp.has_section("module-parameters"):
for key, value in tmp.items("module-parameters"): for key, value in tmp.items("module-parameters"):

View file

@ -113,6 +113,12 @@ def test_missing_parameter():
assert cfg.get("test.key") == None assert cfg.get("test.key") == None
assert cfg.get("test.key", "no-value-set") == "no-value-set" assert cfg.get("test.key", "no-value-set") == "no-value-set"
def test_file_case_sensitivity():
cfg = core.config.Config([])
cfg.load_config("", content="[module-parameters]\ntest.key = VaLuE\ntest.KeY2 = value")
assert cfg.get("test.key") == "VaLuE"
assert cfg.get("test.KeY2") == "value"
# #
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4