[pygobject] Gio overrides: Handle setting GSettings enum keys



commit c0bc69906df2db64560f7c054277ad1956aab57f
Author: Martin Pitt <martinpitt gnome org>
Date:   Thu Oct 11 17:49:30 2012 +0200

    Gio overrides: Handle setting GSettings enum keys
    
    https://bugzilla.gnome.org/show_bug.cgi?id=685947

 gi/overrides/Gio.py         |    9 ++++++++-
 tests/test_overrides_gio.py |    3 +++
 2 files changed, 11 insertions(+), 1 deletions(-)
---
diff --git a/gi/overrides/Gio.py b/gi/overrides/Gio.py
index 7f6e5c7..9f96440 100644
--- a/gi/overrides/Gio.py
+++ b/gi/overrides/Gio.py
@@ -101,8 +101,15 @@ class Settings(Gio.Settings):
             type_str = v.get_child_value(0).get_type_string()
             assert type_str.startswith('a')
             type_str = type_str[1:]
+        elif type_ == 'enum':
+            # v is an array with the allowed values
+            assert v.get_child_value(0).get_type_string().startswith('a')
+            type_str = v.get_child_value(0).get_child_value(0).get_type_string()
+            allowed = v.unpack()
+            if value not in allowed:
+                raise ValueError('value %s is not an allowed enum (%s)' % (value, allowed))
         else:
-            raise NotImplementedError('Cannot handle allowed type range class' + str(type_))
+            raise NotImplementedError('Cannot handle allowed type range class ' + str(type_))
 
         self.set_value(key, GLib.Variant(type_str, value))
 
diff --git a/tests/test_overrides_gio.py b/tests/test_overrides_gio.py
index 4711068..10d634e 100644
--- a/tests/test_overrides_gio.py
+++ b/tests/test_overrides_gio.py
@@ -107,8 +107,11 @@ class TestGSettings(unittest.TestCase):
         self.assertEqual(self.settings['test-string'], 'Goodbye')
         self.settings['test-array'] = [3, 4, 5]
         self.assertEqual(self.settings['test-array'], [3, 4, 5])
+        self.settings['test-enum'] = 'pear'
+        self.assertEqual(self.settings['test-enum'], 'pear')
 
         self.assertRaises(TypeError, self.settings.__setitem__, 'test-string', 1)
+        self.assertRaises(ValueError, self.settings.__setitem__, 'test-enum', 'plum')
         self.assertRaises(KeyError, self.settings.__setitem__, 'unknown', 'moo')
 
     def test_empty(self):



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]