Question

If a GSettings schema exists and has been compiled, there is usually no problem reading from it. However, if it doesn't exist, an error is usually thrown which cannot be handled. Try this in a Python file or console:

from gi.repository import Gio
try:
    settings = Gio.Settings("com.example.doesnotexist")
except:
    print "Couldn't load those settings!"

I'm being as broad as possible with the except, but this is the error that is thrown.

(process:10248): GLib-GIO-ERROR **: Settings schema 'com.example.doesnotexist' is not installed

What I basically want to do is find out if the com.example.doesnotexist schema exists or not; if not, then tell the user to run my setup script before using my application. Any other suggestions on doing this would be welcome.

Was it helpful?

Solution

You can use GSettingsSchemaSource. For instance:

> from gi.repository import Gio
> source = Gio.SettingsSchemaSource.get_default()
> source.lookup("org.gnome.Epiphany", True)
<GSettingsSchema at 0xa462800>
> source.lookup("com.example.doesnotexist", True)

>

According to the documentation, lookup should return NULL (None) if the schema does not exists, however in PyGObject returns NoneType. Anyway, you can use it to check whether the schema exists or not.

OTHER TIPS

I know is is for Python. But here a solution for people using C:

gboolean g_settings_schema_exist (const char * id)
{ 
  gboolean ret = FALSE;
  GSettingsSchema * res = g_settings_schema_source_lookup (
                                 g_settings_schema_source_get_default(), 
                                 id, FALSE);                                 
  if (res != NULL)
  {
    ret = TRUE;
    g_object_unref (res);
  }
  
  return ret;
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top