From 2f582f39664afdff0502dbd30b769b5b10b6e7fe Mon Sep 17 00:00:00 2001 From: Mathieu Comandon Date: Wed, 26 Oct 2016 21:27:09 -0700 Subject: [PATCH] Fix WineRegistryKey to allow setting keys correctly --- lutris/util/wineregistry.py | 20 +++++++++----------- tests/test_registry.py | 5 +++++ 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/lutris/util/wineregistry.py b/lutris/util/wineregistry.py index b06a40924..3e2f85bde 100644 --- a/lutris/util/wineregistry.py +++ b/lutris/util/wineregistry.py @@ -201,15 +201,12 @@ class WineRegistryKey(object): if line.startswith('#'): self.add_meta(line) elif line.startswith('"'): - elems = re.split(re.compile(r'(?<=[^\\]\")='), line, maxsplit=1) - if len(elems) != 2: - print(elems) - raise ValueError("Unable to split %s" % line) - key, value = elems - self.set_subkey(key, value) + key, value = re.split(re.compile(r'(?<=[^\\]\")='), line, maxsplit=1) + key = key[1:-1] + self.subkeys[key] = value elif line.startswith('@'): k, v = line.split('=', 1) - self.set_subkey('\"default\"', v) + self.subkeys['default'] = v def add_to_last(self, line): last_subkey = list(self.subkeys.keys())[-1] @@ -235,8 +232,9 @@ class WineRegistryKey(object): if isinstance(value, int): return "dword:{:08x}".format(value) elif isinstance(value, str): - print(value) - return "\"{}\"\n".format(value) + return "\"{}\"".format(value) + else: + raise NotImplementedError("TODO") def add_meta(self, meta_line): if not meta_line.startswith('#'): @@ -257,7 +255,7 @@ class WineRegistryKey(object): return self.metas.get(name) def set_subkey(self, name, value): - self.subkeys[name[1:-1]] = value.strip() + self.subkeys[name] = self.render_value(value) def get_subkey(self, name): if name not in self.subkeys: @@ -268,4 +266,4 @@ class WineRegistryKey(object): elif value.startswith('dword:'): return int(value[6:], 16) else: - raise ValueError("TODO: finish handling other types") + raise ValueError("Handle %s" % value) diff --git a/tests/test_registry.py b/tests/test_registry.py index 7454aceb2..e0424048a 100644 --- a/tests/test_registry.py +++ b/tests/test_registry.py @@ -63,6 +63,11 @@ class TestWineRegistry(TestCase): content = system_reg.render() self.assertEqual(content, original_content) + def test_can_set_value_to_existing_subkey(self): + self.assertEqual(self.registry.query('Control Panel/Desktop', 'DragWidth'), '4') + self.registry.set_value('Control Panel/Desktop', 'DragWidth', '8') + self.assertEqual(self.registry.query('Control Panel/Desktop', 'DragWidth'), '8') + class TestWineRegistryKey(TestCase): def test_creation_by_key_def_parses(self):