2 Class for storing and retrieving configuration values via GConf.
12 import gnome.gconf as gconf
15 from utils import gconftool as gconf
18 _CLIENT = gconf.client_get_default()
23 Class for storing and retrieving configuration values via GConf.
26 cfg = Config("my-plugin", [("foo", Config.STRING, "foobar"),
27 ("bar", Config.INTEGER, 10)])
28 cfg["foo"] = "Some string"
41 def __init__(self, prefix, schema):
43 Creates a new Config object for storing configuration under the given
44 prefix with the given schema. Prefix must end with "/".
46 Schema is a list of tuples of the form
47 C{(key_name, datatype, default_value)}
48 describing the valid keys that can be stored.
51 @param prefix: prefix for keys
52 @param schema: list of schema tuples
55 self.__prefix = prefix
56 self.__schema = schema
59 def __lookup_schema(self, key):
61 for k, t, d in self.__schema:
65 raise KeyError("no such key %s" % key)
68 def __getitem__(self, key):
70 return self.__get(key)
73 def __setitem__(self, key, value):
75 self.__set(key, value)
80 dtype, default = self.__lookup_schema(key)
82 if (dtype == self.STRING):
83 return _CLIENT.get_string(self.__prefix + key) \
85 elif (dtype == self.STRING_LIST):
86 l = _CLIENT.get_list(self.__prefix + key, gconf.VALUE_STRING) or []
87 return l[:] or default[:]
88 elif (dtype == self.INTEGER):
90 have_key = _CLIENT.get_without_default(self.__prefix + key)
94 v = _CLIENT.get_int(self.__prefix + key)
95 if (not have_key): v = default
97 elif (dtype == self.INTEGER_LIST):
98 l = _CLIENT.get_list(self.__prefix + key, gconf.VALUE_INT) or []
99 return l[:] or default[:]
100 elif (dtype == self.BOOL):
102 have_key = _CLIENT.get_without_default(self.__prefix + key)
106 v = _CLIENT.get_bool(self.__prefix + key)
107 if (not have_key): v = default
113 def __set(self, key, value):
115 dtype, default = self.__lookup_schema(key)
117 if (dtype == self.STRING):
118 _CLIENT.set_string(self.__prefix + key, value)
119 elif (dtype == self.STRING_LIST):
120 _CLIENT.set_list(self.__prefix + key, gconf.VALUE_STRING, value)
121 elif (dtype == self.INTEGER):
122 _CLIENT.set_int(self.__prefix + key, value)
123 elif (dtype == self.INTEGER_LIST):
124 _CLIENT.set_list(self.__prefix + key, gconf.VALUE_INT, value)
125 elif (dtype == self.BOOL):
126 _CLIENT.set_bool(self.__prefix + key, value)